Gibt es eine Möglichkeit, einen Vim-Befehl in einer Datei über die Befehlszeile auszuführen?
Ich weiß, dass das Gegenteil so ist:
:!python %
Aber was ist, wenn ich :retab
eine Datei erstellen möchte, ohne sie in Vim zu öffnen? Zum Beispiel:
> vim myfile.c
:retab | wq
Dadurch wird myfile.c geöffnet, die Registerkarten durch Leerzeichen ersetzt und anschließend gespeichert und geschlossen. Ich möchte diese Sequenz irgendwie zu einem einzigen Befehl verketten.
Es wäre ungefähr so:
> vim myfile.c retab | wq
xargs
(find -name \*.[ch] | xargs -n 1 vim -c "set et|retab|wq"
) auf mehreren Dateien auszuführen , aber das war sehr langsam. Bei jedem Aufruf beschwerte sich vim, dass die Eingabe nicht von einem Terminal stammte, und ich denke, es verzögert sich um ein oder zwei Sekunden, um das Lesen der Nachricht zu ermöglichen. Alternativ lässt eine for-Schleife stdin unberührt und ist so schnell :for f in $(find -name \*.[ch]); do vim -c "set et|retab|wq" $f; done
. Dies ist jedoch nicht perfekt, z. B. brechen Dateinamen mit Leerzeichen oder zu viele Dateinamen dies ab (vim hat also möglicherweise die Option, diese Warnung zu unterdrücken).Sie haben mehrere Möglichkeiten:
-c "commands"
: spielt Ex-Befehle ab, wie Sie sie in die Befehlszeile eingegeben haben.In Ihrem Beispiel :
vim myfile -c 'retab | wq'
. Dies schlug Firstrock vor.-S "vim source file"
: Quelle gegebenes vim-Skript(wie das Ausführen
vim -c "source 'vim source file'"
):Wenn Sie eine Datei haben, die Folgendes
script.vim
enthält:Dann können Sie verwenden
vim myfile.c -s script.vim
(die Erweiterung spielt keine Rolle)-s "scriptin file"
: spielt den Inhalt einer Datei ab, da er Befehle für den normalen Modus enthält : Wenn Sie Folgendesscript.txt
enthalten:Wenn das Zeilenende aus einem einzelnen
^M
Zeichen besteht (zum Beispiel haben Sie das Skript mit dem gespeichert:set fileformat=mac | w
), können Sie Folgendes ausführen:vim myfile.c -S script.txt
(ZZ
ist eine weitere Möglichkeit, vim zu beenden und die aktuelle Datei zu speichern).Beachten Sie, dass Sie diese Skripte mit aufzeichnen können
vim my_file -W script.txt
, es jedoch einen Fehler gibt, wenn Sie zufällig gvim (die GUI) verwenden.quelle
vim -S <(echo -e "VundleInstall \n q \n q")
.Keine direkte Antwort auf Ihre Frage, aber wenn Sie Tabulatoren für eine Liste von Dateien durch Leerzeichen ersetzen (oder eine andere Regex-Suche / Ersetzung durchführen) möchten, können Sie einfach die direkte Suche / Ersetzung verwenden:
oder
(In diesem Beispiel ersetze ich jedes Tabulatorzeichen durch drei Leerzeichen.)
HINWEIS: Das
-i
Flag bedeutet, dass es an Ort und Stelle arbeitet.Von der
sed
Manpage:quelle