Antworten:
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 dann fg
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 Sie a
zum Abbrechen auf drücken und fg ausführen können, um zu vi zurückzukehren.
Da Sie "get the stdout" erwähnt haben, beachten Sie, dass Sie dies tun können
:r! command
und die Ausgabe des Befehls wird der Datei hinzugefügt, oder
:<range>!command
den Inhalt des Bereichs durch den Befehl filtern zu lassen [zB :1,$!wc
]
:%!command
sieht ziemlich nützlich aus
:.,+20 !sort
]
Meine bevorzugte Sprache ist
!!command
Das ist die Abkürzung für
:.!command
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:
!!sh
Oder
!<motion>command
wie zum Beispiel
!apsh
um den gesamten aktuellen Absatz durch die Shell zu führen.
!}
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.
:!<command>
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.
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
.
Ich habe dies in meinem .vimrc. Vor einiger Zeit auf Stack Overflow gefunden:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
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.