Ist es möglich, einen bash-Befehl in vi einzugeben und die stdout zu erhalten?
Ich finde es oft mühsam, vi zu schließen und wieder zu öffnen, nur weil ich etwas in der Shell nachschlagen möchte.
Ja, zB wenn Sie dies möchten ls
, versuchen Sie:
:!ls
Verwenden Sie, um eine Shell zu erzeugen
:shell
:w !sudo tee %
nano
Ich neige dazu
ctrl+z
, vi zu schlafen, auszuführen, was ich in der Shell brauche, und dannfg
vi wieder aufzunehmen. Nicht gerade eine Antwort auf Ihre Frage, aber ich finde es eine sehr schnelle Art zu arbeiten.Wenn Sie vergessen, dass vi im Hintergrund geöffnet ist (dies kann vorkommen, wenn Sie beschäftigt sind), werden Sie beim Versuch, sich von der Shell abzumelden
ctrl+d
, gewarnt, dass Hintergrundjobs ausgeführt werden, und Sie können sie entweder schließen. oder drücken Sie erneut Strg + d, um sich abzumelden. Wenn Sie versuchen, dieselbe Datei zweimal erneut zu öffnen, wird eine Wiederherstellungswarnung angezeigt, sodass Siea
zum Abbrechen auf drücken und fg ausführen können, um zu vi zurückzukehren.quelle
Da Sie "get the stdout" erwähnt haben, beachten Sie, dass Sie dies tun können
und die Ausgabe des Befehls wird der Datei hinzugefügt, oder
den Inhalt des Bereichs durch den Befehl filtern zu lassen [zB
:1,$!wc
]quelle
:%!command
sieht ziemlich nützlich aus:.,+20 !sort
]Meine bevorzugte Sprache ist
Das ist die Abkürzung für
Dadurch wird die aktuelle Zeile durch den Befehl geleitet und die Ausgabe in die Datei eingefügt. Der häufigste Fall für mich ist, den Befehl mit vi zu bearbeiten und auszuführen:
Oder
wie zum Beispiel
um den gesamten aktuellen Absatz durch die Shell zu führen.
quelle
!}
Sie, dass Sie am Anfang des Absatzes positioniert sein müssen, versuchen Sie es!ap
. (Ich weiß nicht, ob dies in jedem vi oder nur vim ist)Mit Doppelpunkt und Ausrufezeichen können Sie jeden Befehl im Shell-Pfad und in den Shell-Skripten ausführen. Beachten Sie, dass der Befehl unter dem Benutzer ausgeführt wird, der das Programm vi / vim ausführt, und unter Verwendung seiner Umgebung.
Da vi die Umgebung verwendet, die beim Ausführen aktiv war, wird derselbe Pfad verwendet, der auch im übergeordneten Befehl angegeben war. Denken Sie daran, dass einige Shells einen Cache der Programme im Pfad behalten und vi möglicherweise nicht mit diesem Cache funktioniert (abhängig von der verwendeten Shell und ihrer Version), sodass Sie möglicherweise die falsche Binärdatei ausführen, falls Sie mehr haben als eine Binärdatei mit dem gleichen Namen.
quelle
Sie können die Ausgabe eines
:!ls -lh
Befehls anzeigen, indem Sie beispielsweise im Befehlsmodus eingeben .Wenn Sie die Ausgabe des Befehls in die zu bearbeitende Datei einfügen möchten, fügen Sie einfach eine hinzu
r
. Zum Beispiel:r!which perl
.quelle
Verwenden
!
ist natürlich die richtige Antwort, aber wenn Sie häufig hin und her wechseln, kann auch etwas wie screen oder tmux hilfreich sein.quelle
Ich habe dies in meinem .vimrc. Vor einiger Zeit auf Stack Overflow gefunden:
quelle
Ich würde und werde dies in Linux leicht umgehen, indem ich zwei Terminal-Befehlszeilenfenster öffne, in denen vi ausgeführt wird und das andere zur gleichen Zeit für andere Arbeiten verfügbar ist.
quelle