Blocco delle modifiche al file di sola lettura


14

Quando si utilizza Vim per modificare un file di sola lettura, verrà emesso un avviso la prima volta che viene modificato, ma consente di apportare eventuali modifiche. Posso capire che questo comportamento potrebbe essere utile per qualcuno che intenda salvare il file con un altro nome; ma a volte apro file a cui non ho accesso in scrittura, quindi dimentico e apporto modifiche.

È possibile entrare in una modalità in cui Vim consentirà la visualizzazione del file ma bloccherà qualsiasi opzione che apporti modifiche?

Risposte:


13

Ho trovato una soluzione L'impostazione nomodifiableimpedisce la modifica del file (come utilizzato nelle finestre della guida). Ho creato una semplice funzione per impostare o disinserire a modifiableseconda se readonlyè impostato e collegato a un autocmd.

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction

4
Puoi accorciarlo facendo:let &modifiable = !&readonly
Martin Tournoij

@Carpetsmoker Molto meglio come una fodera, grazie! Tuttavia dovrebbe essere ancora: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

Con questo, dopo aver aperto un readonlyfile e quindi creato un nuovo buffer, il nuovo buffer finisce nomodifiable.
Prassolitico il

Grazie per averlo sottolineato, non me ne ero accorto. Non sono sicuro su come testare un nuovo buffer.
ZeroKelvinKeyboard

1
@Praxeolitic: ho appena pubblicato una risposta che dovrebbe rispondere a questo, fammi sapere se funziona.
4

7

Aggiungi questo al tuo .vimrc:

autocmd BufRead * let &l:modifiable = !&readonly

Questo si basa sulla risposta di @ ZeroKelvinKeyboard per influenzare solo il buffer corrente.
4

0

Per quanto le risposte sopra siano corrette, c'è un'altra cosa da tenere in considerazione: fintanto che il file è di "sola lettura", non dovrebbe esserci modo di modificare il contenuto del file a meno che tu non sia il proprietario del file o avere il diritto di rendere quel file scrivibile. E anche allora vim non scrive le modifiche al file a meno che non si ignori esplicitamente lo stato "sola lettura" con ": w!".

Se in effetti è possibile modificare un file che dovrebbe essere di sola lettura, è possibile che si desideri ricontrollare i diritti, potrebbe esserci un errore di configurazione della sicurezza. Se non riesci solo a modificare il file con vim, resteranno comunque disponibili altri modi di modifica, quindi se il file non deve essere modificato, i diritti dovrebbero essere impostati correttamente. In Windows, puoi forzare la lettura del file in sola lettura negando esplicitamente la modifica a tutti, in Linux puoi utilizzare l'attributo esteso "immutabile" (chattr + i).


2
Scusa se non sono stato molto chiaro. Questa domanda non riguardava la modifica accidentale di un file di sola lettura; Volevo impedirmi di poter modificare il buffer di un file per il quale non avevo accesso in scrittura. A volte apro accidentalmente i file di configurazione del sistema come utente normale anziché come utente root. In questo caso non ho accesso in scrittura al file, quindi il buffer appare in sola lettura ma Vim mi consentirà comunque di modificare il buffer. Quando provo a salvare non posso perché non ho accesso in scrittura. In questo caso, volevo che Vim bloccasse le modifiche al buffer.
ZeroKelvinKeyboard

Ah, capisco. Ho avuto l'idea che tu lo volessi come una sicurezza. Ignora la mia risposta quindi :)
mikky

OP significa che quando si apre un file non di sola lettura nel sistema operativo, ma al momento non desidera (o si ritiene opportuno) apportare modifiche e non desidera limitarsi. Sto pensando esattamente lo stesso, quindi andando qui da Google!
Violapterin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.