So setzen Sie das ausführbare Bit für eine bestimmte Datei automatisch

10

Ich möchte, dass beim Erstellen einer bestimmten Datei, vorausgesetzt, ich erstelle sie im VIM-Editor, die erstellte Datei auch beim Erstellen ausführbare Berechtigungen erhält. Ich möchte dies, da ich einige Python-Dateien erstelle und keine expliziten Berechtigungen für die Datei festlegen möchte, damit das ausführbare Bit gesetzt wird, sobald ich eine Datei mit einer bestimmten Erweiterung oder mit einem bestimmten Editor erstelle.

mandeep
quelle

Antworten:

11

Für vim stehen leistungsstarke Skripte zur Verfügung. Zum Beispiel habe ich in meiner .vimrc:

" Stolen from http://www.debian-administration.org/articles/571
" Sets +x on stuff starting with the magic shebang.
au BufWritePost * if getline(1) =~ "^#!" | silent !chmod a+x <afile>

Wenn Sie dies nur mit Dateinamen tun möchten, anstatt nach dem # zu suchen! Linie, könnten Sie tun:

au BufWritePost *.ext silent !chmod a+x <afile>     " untested

Dieser Artikel über die Debian-Administration enthält auch Anweisungen für EMACS.

derobert
quelle
Auf was ist dein Autoread dann eingestellt?
Dustin
@dustin autoread ist in meinem vimrc gesetzt (true / on / yes) (AFAIK, es ist nur ein Boolescher Wert, entweder ein oder aus)
derobert
1

So sehr mir die Antwort von derobert gefällt , veranlasst mich VIM, folgende Warnung zu geben:

W16: Warnung: Der Modus der Datei "test.sh" hat sich seit Beginn der Bearbeitung geändert

Der folgende (etwas längere) Code löst dieses Problem (erfordert ein Python-fähiges vim):

function! SetExecutableBit()
python <<EOD
import vim
import os
import stat
filename = vim.current.buffer.name
mode = os.stat(filename).st_mode
os.chmod(filename, mode | stat.S_IXUSR)
EOD
endfunction

autocmd BufWritePost *
    \ if getline(1) =~ "^#!" | call SetExecutableBit()
Søren Løvborg
quelle
Ah, ich bekomme diese Warnung wahrscheinlich nicht so, wie ich sie autoreadeingestellt habe.
Derobert
Ich bin verwirrt, dass die Warnung zum Schweigen gebracht wird, weil sie genau das Gleiche zu tun scheint - nur ein Python-Skript anstelle von chmod
aufrufen
Jep. Aus irgendeinem Grund löst die Python-Funktion die Erkennung von Modusänderungen nicht aus. Könnte eine Eigenart meines Setups sein, obwohl ich glaube, dass ich unter Ubuntu eine eher Vanille-Vim-Installation verwende.
Søren Løvborg