Ich möchte /dev/stdout
anstelle der Datei den gesamten Puffer in die Standardausgabe ( ) schreiben, und der folgende Befehl funktioniert beim Bearbeiten der Datei wie erwartet:
:w >> /dev/stdout
Tipp: Drücken Sie Control+ L, um den Bildschirm zu aktualisieren.
Aber es funktioniert nicht wie erwartet, wenn ich versuche, dasselbe über die Befehlszeile ( nicht interaktiv ) zu tun , zum Beispiel:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
Das gleiche :w !tee
gilt für :x! /dev/stdout
,, :%print
und ähnliches.
Vor dem Beenden heißt es : [Device] 1L, 17C appended
.
Gibt es eine Möglichkeit, vim zu zwingen, die Standardeingabe in die Standardausgabe in der Mitte einer Pipe zu schreiben? Vielleicht ist es irgendwie gepuffert?
command-line
invocation
unix
ex-mode
Kenorb
quelle
quelle
vim
anstelle vonsed
(z. B. massenweise wiederholte komplexe Änderungen an mehreren großen Dateien) das Parsen von Dateien zu verwenden. Das Beispiel tut nichts, um es einfach zu halten und kein potenzielles Duplikat eines anderen Beitrags zu erstellen .Antworten:
Um einen Puffer für die Shell-Standardausgabe zu drucken,
vim
muss er im Ex-Modus gestartet werden. Andernfalls wird der "normale" Weg mit einem eigenen Fenster geöffnet und alle Ausgabepuffer beim Beenden werden gelöscht.Hier ist das einfachste Arbeitsbeispiel:
oder noch kürzer:
Hinweis: Der Befehl entspricht
vim -e
im Wesentlichen demex
Befehl.Es muss ein spezieller Dateideskriptor für die Standardeingabe angegeben werden (
/dev/stdin
), um zusätzliche störende Nachrichten zu vermeiden (wie unten erläutert).Und hier sind einige Beispiele mit Parsing-Strings:
Hinweis: Das letzte Beispiel zeigt eine besonders ärgerliche Nachricht, die nicht ausgeblendet werden kann. Dies liegt daran, dass eine Standardstrategie darin besteht, die gesamte Datei in den Speicher einzulesen und zu sagen, dass sie von der Standardeingabe gelesen wurde. Das erste Beispiel funktioniert ohne die Nachricht, da die Datei endlose Daten ohne EOF- Signal (End-of-File ) erzeugt, sodass sie niemals das Ende ihrer Eingangslesung erreicht.
Verbunden:
quelle
+q!
eher tun als+:q!
, oder?vipe
ist ein praktisches Tool zum Bearbeiten von Pipelines, das Teil desmoreutils
Pakets ist. Es ist ein Wrapper für Redakteure (einschließlich des,vi
der ihm seinen Namen gibt). Es nutzt dieEDITOR
Umgebungsvariable den Editor zu setzen, so wie mit anderen Werkzeugen , die Gebrauch machenEDITOR
(wie zBcrontab
,visudo
usw.), können Sie Script - Aktionen verwenden diese Variable. Sie können es beispielsweise folgendermaßen ändern:Natürlich können komplizierte Aktionen dazu führen, dass die Hölle zitiert wird, sodass Sie ein Skript schreiben können:
Und verwenden
EDITOR="sh /path/to/script"
.quelle