Wie leite ich die Befehlsausgabe in bash an vim um?

87

Ich versuche, die Ausgabe eines Bash-Befehls in eine neue Datei umzuleiten.

Wenn ich die Pipe wie folgt probiere:

ls -la | vim

Bash zeigt mir die Fehler:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Ich weiß, dass ich Vim öffnen und dann verwenden kann:

:r !ls -la

Aber gibt es eine Möglichkeit, dies in bash selbst zu tun, sodass Vim geöffnet wird und die Ausgabe dort automatisch eingefügt wird?

faizal
quelle

Antworten:

140

Sie können die Prozessersetzung verwenden (dies funktioniert auch mit Anwendungen, aus denen nicht gelesen werden kann STDIN):

vim <(ls -la)

Oder verwenden Sie vimdie Funktion zum Lesen von STDIN:

ls -la | vim -
Chaos
quelle
2
<(ls -la)ist eigentlich eine Prozessersetzung und keine Befehlssetzung .
Eliah Kagan
1
Die Option von vim gefällt mir sehr gut. Sie ermöglicht mir das Suchen, Finden und Speichern der Ausgabe auf einfache Weise aus Datendumps.
Josue Alexander Ibarra
38

Du bist ganz nah dran. Sie haben nur einen Charakter vermisst.

ls -la | vim -
Cris Holdorph
quelle
10
Nun, technisch sind es zwei Charaktere. ;)
Cory Klein
19

Hier ist ein weiterer Ansatz, der hoffentlich jemandem etwas Neues beibringen soll.

Wenn Sie wissen, dass der Befehl :r !ls -lain vim ausgeführt wird, können Sie folgendermaßen vorgehen, um vim zu öffnen und den Befehl direkt nach dem Öffnen von bash auszuführen:

vim -c ':r! ls -la'

Dies entspricht dem Öffnen vimund Ausführen des Befehls :r! ls -la. Dies sollte mit jedem vimBefehl funktionieren , bei dem der Befehl hinter der -cOption steht.

Alaa Ali
quelle
12

Sie können vim anweisen, stdin zu öffnen:

ls -la | vim -
zweifelhaft
quelle
1

Wenn Sie die Ausgabe einfach in eine Textdatei umwandeln möchten, müssen Sie vim nicht aufrufen. Bash schafft es alleine

ls -la > outputfile.txt
Jake Stewart
quelle
1

setlocal buftype=nofile

Dies ist eine gute Option, wenn Sie einen zu ersetzenden Alias ​​erstellen möchten less:

seq 100 | vim +':setlocal buftype=nofile' -

Jetzt müssen Sie das nicht mehr eingeben! beenden.

Eine andere Option ist:

seq 100 | vim +'nnoremap q :quit!' -

so können Sie mit nur beenden q<enter>.

Ciro Santilli ist ein Schauspieler
quelle
Gute Idee. Auf jeden Fall kürzer als so lange tippen! :)
Kode