Ich grep -e Peugeot -e PeuGeot carlist.txt
durchsuche die Datei carlist.txt und ziehe einige Elemente heraus. Ich gehe davon aus, dass grep -e Peugeot -e PeuGeot carlist.txt | vi
sie für mich durchgeleitet werden , aber das bekomme ich:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
:read !grep -e Peugeot -e PeuGeot carlist.txt
.:read !cmd...
wird die Ausgabe von cmd ... in die Datei aufnehmen (an der Position des Cursors)grep ... > /tmp/foo
. Sie können&& vi /tmp/foo
am Ende hinzufügen, wenn Sie diese Datei sofort bearbeiten möchten.vi
arbeitet mit beliebigen Textdateien; Die Dateien selbst sind nicht direkt zugeordnetvi
. (Oder, wie ich gerade erfahren habe,vi -
wird veranlasstvi
, den Inhalt von zu bearbeitenstdin
;vim
tut dies, aber nicht alle Versionen vonvi
.)Antworten:
Wenn Sie vi oder vim mit '-' als Argument ausführen, wird die zu bearbeitende Datei von der Standardeingabe gelesen. Daher:
werde tun was du brauchst.
quelle
stdin
. In einigen Fällen werden Sie von umleitenstderr
zustdin
, zum Beispiel:valgrind my_file.out 2>&1 | vi -
grep
(bestehend aus nicht druckbaren Zeichen) in Vim bleiben ? Sie können immer nur in Vim suchen .Sie sollten die Ausgabeumleitung verwenden :
Ich denke auch, dass Sie
grep
verbessert werden können:quelle
Abgesehen davon
vim -
können Sie die Prozessersetzung auch mithilfe der<(command)
Syntax verwenden. Beispiel:Siehe auch:
quelle
Die Ausgabeumleitung kann auch folgendermaßen verwendet werden:
Sogar mehrere Befehlsausgaben können umgeleitet werden, als ob sie in separaten Dateien gespeichert wären:
quelle
In
~/bin/r
:in
~/.vimrc
:Dann:
und ich habe
in meinem
~/.bashrc,
soquelle
Es gibt viele effektive Möglichkeiten, um das zu tun, was Sie wollen, entweder innerhalb von vi (m) oder außerhalb von vi (m).
Führen Sie Ihren Befehl aus, erstellen Sie eine (temporäre) Datei und bearbeiten Sie die Datei ( siehe Antwort von Joseph R. ).
Führen Sie Ihren Befehl (im Hintergrund) aus, um eine temporäre Datei zu erstellen, und bearbeiten Sie die Datei mit ": e!" um Ihre Datei zu aktualisieren, während sie erstellt wird (dies ist nützlich für Protokolldateien und andere Dateien, die von einem anderen Prozess erstellt werden, z. B. cron?),
Führen Sie vi (m) aus, und führen Sie einen untergeordneten Prozess aus, um die temporäre Datei zu erstellen, und lesen Sie sie dann.
Oder wechseln Sie einfach zu der Datei,
Führe vi (m) aus und benutze den Doppelknall "!!" Damit vi den Befehl child ausführt, die Ergebnisse aufnimmt und an der aktuellen Position einfügt (überschreibt die aktuelle Zeile, vergewissern Sie sich also, dass Sie eine leere Zeile haben),
Und jetzt können Sie die Datei (wenn Sie möchten) in einen beliebigen Dateinamen schreiben,
Und die Antwort von Petr Uzel ist auch gut,
Was von stdin liest
quelle