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 :retabeine 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).