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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.