2009-10-22 3 views
19

Ich öffne manchmal eine schreibgeschützte Datei in vi und vergiss dabei, chmod +w vor dem Öffnen zu öffnen. Gibt es eine Möglichkeit, die Datei innerhalb von vi zu ändern?So ändern Sie die Dateiberechtigung in vi

Etwas wie !r chmod +w [filename]?

Gibt es eine Verknüpfung, um auf die aktuell geöffnete Datei zu verweisen, ohne den langen Namen zu buchstabieren?

Antwort

46

Gerade

:!chmod +w % 

im Befehlsmodus verwenden. % wird durch den aktuellen Dateinamen ersetzt.

+1

Danke --- das war nützlich. Ein kleiner Ärger ist, dass vim jetzt warnt, dass die Datei neu geladen werden muss (W16). Gibt es eine Möglichkeit, es zu stoppen, ohne Autoread zu setzen? – Rmano

1
:!chmod <perms> <file> 

und wenn vi immer noch nicht schreiben will,

:se cpo-=W 
6

Haben Sie

!chmod +w % 

Das% versuchen, die aktuellen Dateinamen darstellt.

Sie könnten auch einen Schlüssel wie Ctrl-W zuordnen.

:map <C-w> :!chmod +w %<CR> 

Beachten Sie, dass Sie Strg-V Ctrl-M die <CR>

31

zu erhalten, wenn Sie die Rechte auf die Datei zu schreiben, dann können Sie nur Ausrufezeichen verwenden, um es zu zwingen:

:w! 

Wenn Sie nicht über die Rechte und Benutzer ändern müssen, wollen aber trotzdem in die Datei schreiben, manchmal kann man für so etwas wie

gehen
:w !sudo tee % 
+0

ja, aber ich möchte nicht w tippen! all time ... only w – vehomzzz

+3

Du willst auch nicht immer in Datei schreiben ;-) –

4

Ich weiß, dies ist ein alter Post, aber mit Vim Version8 wurde eine Funktion hinzugefügt, mit der Sie Dateiberechtigungen ändern können.

Nach der version8.txt Datei:

setfperm() legen Sie die Berechtigungen einer Datei

Diese Funktion kann dann über den "Ruf" Befehl in Vim aufgerufen werden.

Dies geschieht wie folgt:

:call setfperm("file name","permissions") 

Die Struktur der "Berechtigungen" Zeichenfolge, die die gleiche Form annimmt, wie in der Vim-Dokumentation beschrieben:

getfperm ({fname}) getfperm() Das Ergebnis ist ein String, der die Berechtigungen für die angegebene Datei {fname} liest, schreibt und ausführt. Wenn {fname} nicht existiert oder sein Verzeichnis nicht gelesen werden kann, wird eine leere Zeichenfolge zurückgegeben. Das Ergebnis hat das Format "rwxrwxrwx", wobei jede Gruppe von "rwx" -Flagern wiederum die Berechtigungen des Besitzers der Datei, der Gruppe, zu der die Datei gehört, und anderer Benutzer darstellt. Wenn ein Benutzer keine bestimmte Berechtigung hat, wird das Flag für dieses durch die Zeichenfolge "-" ersetzt. Beispiel: : echo getfperm ("/ etc/passwd") Dies wird hoffentlich (aus Sicherheitsgründen) die Zeichenfolge "rw-r - r--" oder sogar "rw ------ - ".

Ein minimales Beispiel:

:call setfperm("foo.txt","rwxrwxrwx") 

Dieser lesen fügt, schreiben und Berechtigungen für die „foo.txt“ Datei im aktuellen Verzeichnis auszuführen.

2

Nachdem Sie Ihre Datei mit vim bearbeitet haben, drücken Sie "esc" und dann ":". dann den folgenden Befehl ein:

w !sudo tee % 

Dann drücken Sie "Enter". Geben Sie dann

:q! 

erfolgreich Ausstieg aus dem Editor.