Piping-Puffer zum externen Befehl in Vim

92

Ich bin eine Art Vim-Neuling. Ich möchte den Inhalt des aktuellen Puffers an stdin des externen Befehls senden (sagen wir mail). Mein letzter Zweck ist es, eine Verknüpfung festzulegen, um E-Mails schnell aus dem aktuellen Vim-Puffer zu senden. Ich vermute, dass dies eine triviale Angelegenheit sein sollte, aber ich konnte keinen Weg finden, den Vim-Puffer an einen externen Befehl zu senden. Danke im Voraus.

Yasar
quelle
Verwandte Fragen zum Bereitstellen von ausgewähltem Text STDINin Bezug auf Shell-Befehle: Pipe zu Shell und Empfang der Ausgabe in der
Infozeile

Antworten:

130

Sie können :w !cmdden aktuellen Puffer in den Standard eines externen Befehls schreiben. Von :help :w_c:

: [Bereich] w [Ritus] [++ opt]! {cmd}

Ausführen {cmd}mit [range]Zeilen als Standardeingabe (beachten Sie das Leerzeichen vor dem '!'). {cmd}wird wie mit ausgeführt ":!{cmd}", jeder '!'wird durch den vorherigen Befehl ersetzt |:!|.

Ein verwandter Befehl :%!cmdmacht dasselbe und ersetzt dann den aktuellen Puffer durch die Ausgabe des Befehls. So :%!sortwürde rufen Sie den externen Befehl sort den aktuellen Puffer an seinem Platz zu sortieren.

John Kugelman
quelle
6
Dies ist nützlich, um json wie folgt zu formatieren: :'<,'>!python -mjson.tooloder:%!python -mjson.tool
TrinitronX
1
Verwenden Sie für die Formatierung go :%!gofmtohne die letzte %, da dies dazu führen würde, dass die gespeicherte Version verwendet wird (die vom aktuellen Puffer abweichen kann)
thomasrutter
Gibt es eine Möglichkeit, den aktuellen Puffer nur bei Erfolg durch die Befehlsausgabe zu ersetzen ? Wenn der Befehl ungleich Null zurückgibt, Puffer nicht ersetzen?
Thomasrutter
@ Thomasrutter Wenn der Puffer durch eine Fehlermeldung anstelle der beabsichtigten Ausgabe ersetzt wird, können Sie einfach ufür Rückgängig
drücken