Blockieren von Änderungen, um nur Dateien zu lesen


14

Wenn Sie Vim zum Bearbeiten einer schreibgeschützten Datei verwenden, wird beim erstmaligen Bearbeiten lediglich eine Warnung angezeigt, es können jedoch Änderungen vorgenommen werden. Ich kann verstehen, dass dieses Verhalten für jemanden nützlich sein kann, der beabsichtigt, die Datei unter einem anderen Namen zu speichern. Manchmal öffne ich jedoch Dateien, auf die ich keinen Schreibzugriff habe, vergesse sie dann und nehme Änderungen vor.

Ist es möglich, in einen Modus zu wechseln, in dem Vim die Anzeige der Datei zulässt, jedoch alle Optionen blockiert, die Änderungen vornehmen?

Antworten:


13

Ich habe eine Lösung gefunden. Die Einstellung nomodifiableverhindert, dass die Datei bearbeitet wird (wie in den Hilfefenstern verwendet). Ich habe eine einfache Funktion erstellt, die gesetzt oder aufgehoben werden kann, modifiableje nachdem, ob readonlygesetzt und an eine AutocMD angehängt wurde.

" 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
Sie können es kürzer machen, indem Sie let &modifiable = !&readonly
Folgendes

@Carpetsmoker Viel besser als Einzeiler, danke! Allerdings müsste es noch sein: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

Nach dem Öffnen einer readonlyDatei und dem Erstellen eines neuen Puffers endet der neue Puffer damit nomodifiable.
Praxeolitic

Vielen Dank für den Hinweis, ich hatte es nicht bemerkt. Ich bin nicht sicher, wie ich nach einem neuen Puffer suchen soll.
ZeroKelvinKeyboard

1
@Praxeolitic: Ich habe gerade eine Antwort gepostet , die dies ansprechen sollte, lass es mich wissen, wenn es funktioniert.
s4y

7

Fügen Sie dies zu Ihrer .vimrc hinzu:

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

Dies baut auf der Antwort von @ ZeroKelvinKeyboard auf und wirkt sich nur auf den aktuellen Puffer aus.
s4y

0

Soweit die obigen Antworten korrekt sind, ist Folgendes zu beachten: Solange die Datei "schreibgeschützt" ist, sollte es keine Möglichkeit geben, den Inhalt der Datei zu ändern, es sei denn, Sie sind der Eigentümer der Datei oder habe das Recht, diese Datei beschreibbar zu machen. Und selbst dann schreibt vim keine Änderungen in die Datei, es sei denn, Sie überschreiben den Status "Nur Lesen" explizit mit ": w!".

Wenn Sie tatsächlich eine Datei bearbeiten können, die schreibgeschützt sein soll, möchten Sie möglicherweise die Rechte erneut überprüfen. Möglicherweise liegt eine falsche Sicherheitskonfiguration vor. Wenn Sie nur vim nicht in die Lage versetzen, die Datei zu bearbeiten, sind andere Bearbeitungsmöglichkeiten weiterhin vorhanden. Wenn die Datei nicht geändert werden soll, sollten die Rechte ordnungsgemäß festgelegt sein. In Windows können Sie den Schreibschutz der Datei erzwingen, indem Sie explizit das Änderungsrecht für alle Benutzer verweigern. In Linux können Sie das erweiterte Attribut "unveränderlich" (chattr + i) verwenden.


2
Entschuldigung, wenn ich nicht sehr klar war. Bei dieser Frage ging es nicht darum, versehentlich eine schreibgeschützte Datei zu ändern. Ich wollte mich davon abhalten, den Puffer einer Datei zu bearbeiten, für die ich keinen Schreibzugriff hatte. Manchmal öffne ich Systemkonfigurationsdateien versehentlich als normaler Benutzer und nicht als Root. In diesem Fall habe ich keinen Schreibzugriff auf die Datei, sodass der Puffer als schreibgeschützt angezeigt wird. In Vim kann ich den Puffer jedoch weiterhin bearbeiten. Wenn ich versuche zu speichern, kann ich nicht, weil ich keinen Schreibzugriff habe. Ich wollte, dass Vim in diesem Fall Änderungen am Puffer blockiert.
ZeroKelvinKeyboard

Ah ich sehe. Ich hatte die Idee, dass Sie dies als Ausfallsicherung wollten.
Ignoriere

OP bedeutet, dass man eine nicht-schreibgeschützte Datei im Betriebssystem öffnet, aber er / sie derzeit keine Änderung vornehmen möchte (oder dies für angemessen hält) und sich darauf beschränken möchte, dies nicht zu tun. Ich denke genau das gleiche, also gehe ich hier von Google!
Violapterin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.