Blokowanie zmian w pliku tylko do odczytu


14

Kiedy używasz Vima do edycji pliku tylko do odczytu, dostarczy on ostrzeżenie przy pierwszej edycji, ale pozwoli na wprowadzenie jakichkolwiek zmian. Rozumiem, że to zachowanie może być przydatne dla kogoś, kto zamierza zapisać plik pod inną nazwą; ale czasami otwieram pliki, do których nie mam dostępu do zapisu, a następnie zapominam i wprowadzam zmiany.

Czy można wejść w tryb, w którym Vim pozwoli na przeglądanie pliku, ale zablokuje dowolną opcję, która wprowadza zmiany?

Odpowiedzi:


13

Znalazłem rozwiązanie. Ustawienie nomodifiableuniemożliwia edycję pliku (jak w oknach pomocy). Stworzyłem prostą funkcję do ustawienia lub rozbrojenia w modifiablezależności od tego, czy readonlyjest ustawiony i podłączyłem go do 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
Możesz go skrócić, wykonując:let &modifiable = !&readonly
Martin Tournoij

@Carpetsmoker Znacznie lepiej jako jeden liniowiec, dzięki! Jednak nadal musiałoby to być: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

Dzięki temu, po otwarciu readonlypliku, a następnie utworzeniu nowego bufora, nowy bufor kończy się nomodifiable.
Praxeolitic

Dzięki za zwrócenie na to uwagi, nie zauważyłem. Nie jestem pewien, jak przetestować nowy bufor.
ZeroKelvinKeyboard

1
@Praxeolitic: Właśnie opublikowałem odpowiedź, która powinna rozwiązać ten problem, daj mi znać, czy to działa.
s4y 11.11.16

7

Dodaj to do swojego .vimrc:

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

Opiera się to na odpowiedzi @ ZeroKelvinKeyboard, aby wpływać tylko na bieżący bufor.
s4y

0

Ponieważ powyższe odpowiedzi są prawidłowe, należy wziąć pod uwagę jeszcze jedną rzecz: dopóki plik jest „tylko do odczytu”, nie powinno być możliwości zmiany zawartości pliku, chyba że jesteś właścicielem pliku lub mieć prawo do zapisu tego pliku. I nawet wtedy vim nie zapisuje zmian w pliku, chyba że jawnie zastąpisz stan „tylko do odczytu” przez „: w!”.

Jeśli w rzeczywistości możesz edytować plik, który ma być tylko do odczytu, możesz ponownie sprawdzić uprawnienia, może to oznaczać błąd w konfiguracji zabezpieczeń. Jeśli sprawisz, że vim nie będzie mógł edytować pliku, inne sposoby edycji będą nadal obowiązywały, więc jeśli plik nie ma zostać zmieniony, powinien mieć ustawione odpowiednie uprawnienia. W systemie Windows możesz wymusić, aby plik był tylko do odczytu, wyraźnie odmawiając wszystkim prawa do zmiany, w systemie Linux możesz użyć atrybutu rozszerzonego „niezmiennego” (chattr + i).


2
Przepraszam, jeśli nie byłem bardzo jasny. To pytanie nie dotyczyło przypadkowej zmiany pliku tylko do odczytu; Chciałem powstrzymać się od możliwości edycji bufora pliku, dla którego nie miałem dostępu do zapisu. Czasami przypadkowo otwieram pliki konfiguracji systemu jako zwykły użytkownik, a nie użytkownik root. W tym przypadku nie mam dostępu do zapisu do pliku, więc bufor pojawia się jako tylko do odczytu, ale Vim nadal pozwoli mi edytować bufor. Kiedy próbuję zapisać, nie mogę, ponieważ nie mam dostępu do zapisu. W tym przypadku chciałem, aby Vim zablokował zmiany w buforze.
ZeroKelvinKeyboard

O, rozumiem. Wpadłem na pomysł, że chciałeś tego jako zabezpieczenia przed awarią. Zignoruj ​​więc moją odpowiedź :)
mikky

OP oznacza, że ​​kiedy ktoś otwiera plik nie tylko do odczytu w systemie operacyjnym, ale obecnie nie chce (lub uważa za stosowne) dokonać zmian i chce się ograniczyć. Myślę dokładnie tak samo, dlatego wybieram się tutaj z Google!
Violapterin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.