Ich hatte genau den gleichen Wunsch wie Sie: Ich wollte normale vim-Befehle schreiben und diese einen Pipeline-Stream bearbeiten lassen. Ich war enttäuscht über die Schwierigkeit, normales Vim auf diese Weise zu verwenden (so viele Flags!), Wie es die vim-Standardoptionen bieten.
Deshalb habe ich auf vim einen kleinen Wrapper geschrieben: https://github.com/MilesCranmer/vim-stream/ . Es heißt vims
.
Das Herzstück des Wrappers ist der folgende Befehl:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
Wenn ich das benutze, funktioniert es bei der Befehlsgenerierung ziemlich präzise, und da vim ein Modal-Editor ist, habe ich vims
einen Modal-Stream-Editor erstellt. Es gibt drei Hauptmodi, die für das Bearbeiten von Pipelines nützlich sind:
[-t|--turn-off-mode] - (Default mode)
Every string is a vim command line, e.g., '%g/foo/d' deletes
all lines with foo.
[-e|--exe-mode] - Translated to '%g/$1/exe "norm $2"', see examples below
[-s|--simple-mode] - Like exe-mode, but runs on 1st line only
Schau dir das an:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Geht also e
zum Ende Hello
und a
fängt dann an anzuhängen.
Etwas ausgefalleneres im Exe-Modus, um Zeilen mit dem Inhalt zu kommentieren my_bad_var
und die vorhergehende Zeile zu löschen.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Das heißt vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- der I
Befehl zum Starten des Einfügens am Zeilenanfang und //
die Kommentarsequenz.
\<esc>kdd
drückt die Escape-Taste, rückt eine Zeile nach oben und löscht die Zeile.
Ich habe insgesamt 11 Beispiele auf dem Repo. Ich ermutige Sie, sie zu überprüfen. Auch dies läuft auf vim, es ist nur eine Möglichkeit, vim für Streaming-Eingaben ähnlicher zu machen (aber all Ihre geliebten vim-Makros zu erhalten!)
|
Zeichen leitet die Ausgabe eines Befehls an einen anderen weiter.wea-this
ist kein Befehl. Piping kann nicht verwendet werden, um das zu erreichen, was Sie tun möchten. Dies führt dazu, dass Vims Standard die Anwendung für die linke Hand ist, nicht die Tastatur. Wenn Sie in einen Puffer in vim erhalten stdin wollen, starten Sie es mit einem Minus für die Dateinamen:echo Hello, world! | vim -
.