Schnelle Möglichkeit, die aktuelle Zeile in Vim an die Shell zu senden

3

Angenommen, die aktuelle Zeile in Vim enthält:

ls /home

(oder was auch immer Shell-Befehl). Was ist also eine schnelle Möglichkeit, diese Zeile an die (Bash-) Shell zu senden und die Ergebnisse in Vim zu lesen? Und ohne Plugins.

antonio
quelle

Antworten:

7

Am einfachsten ist es, :!die Zeile voranzustellen (mit I:!), dann yydie Zeile in das unbenannte Register zu ziehen und schließlich das unbenannte Register @"( ") als Makro aufzurufen . Für Vim ist dies genau gleichbedeutend mit dem Tippen

:!ls /home

im normalen Modus. Wenn, wie ich, Sie haben ;und :vertauscht in Ihrem .vimrc für den normalen Modus, werden Sie stattdessen ein Semikolon einfügen.

Es ist wahrscheinlich möglich, das Register an Ort und Stelle zu ändern, anstatt einer tatsächlichen Zeile voranzustellen.


Es ist auch möglich, y$an das Ende der Zeile zu ziehen (ohne die obige Bearbeitung) und dann zu tippen

:!<c-r>"

... ( <c-r>Bedeutung Ctrl+ r), die zu erweitern wird

:!ls /home

(oder was auch immer der Befehl war, den Sie zerrten). Sie müssen verwenden, y$anstatt yysonst wird es zu erweitern

:ls /home^M

^Mdort vertritt die Newline; Dies ist jedoch einfach genug, um es mit einem einzigen Backspace zu löschen.

Diese zweite Methode ist vielleicht etwas schneller, aber alles, was den CtrlSchlüssel betrifft, scheint mir ein wenig unähnlich zu sein.

Übelsuppe
quelle
yyPlus :!c-r"Backspaceist 6 Tastenanschläge, aber wahrscheinlich der schnellere Weg. Übrigens, womit ist das Problem ^M?
Antonio
Ich bin mir nicht sicher, warum genau, aber wenn ich es dort
belasse,
0

Sie können die aktuelle Zeile als Befehl senden, indem Sie einfach Folgendes aufrufen:

:.!bash -e

Die Zeile im geöffneten Puffer wird durch die Ausgabe dieses Befehls ersetzt.

Wenn Sie die ursprüngliche Zeile lieber beibehalten möchten, können Sie die Ausgabe mit folgendem Befehl an einen anderen Puffer senden:

:.w !bash -e
shime
quelle
0

Hänge das Ergebnis unterhalb der Zeile an

Sie können es in sechs Tastenanschlägen tun: :r!<C-R><C-L><CR>

Ersetzen Sie die Zeile durch das Ergebnis:

Sie können es in fünf Tastenanschlägen tun: !!<C-R><C-L><CR>

Dadurch wird jedoch auch die Zeile selbst als Standardeingabe in den Befehl eingespeist, sodass möglicherweise Nebenwirkungen auftreten. Um dies zu verhindern, können Sie dies tun0D!!<C-R>"<CR>

TitouanT
quelle