在 Vim 中将当前行发送到 shell 的快速方法

ant*_*nio 3 vim shell

假设 Vim 中的当前行包含:

ls /home
Run Code Online (Sandbox Code Playgroud)

(或任何 shell 命令)。因此,将这一行发送到 (bash) shell 并在 Vim 中读取结果的快速方法是什么?并且不使用插件。

evi*_*oup 7

最简单的方法是放在:!行首(with I:!),然后yy将该行拉入未命名寄存器,最后使用@"将未命名(")寄存器作为宏调用。对于 vim,这完全等同于键入

:!ls /home
Run Code Online (Sandbox Code Playgroud)

在正常模式下。如果像我一样,你;:你的.vimrc正常模式切换身边,你要插入一个分号来代替。

可能可以就地更改寄存器,而不是预先添加到实际行。


也可以通过y$拉到行尾(无需上述编辑),然后输入

:!<c-r>"
Run Code Online (Sandbox Code Playgroud)

...(<c-r>意思是Ctrl+ r)这将扩展到

:!ls /home
Run Code Online (Sandbox Code Playgroud)

(或任何你猛拉的命令)。你需要使用y$而不是yy因为否则它会扩展到

:ls /home^M
Run Code Online (Sandbox Code Playgroud)

^M那里代表换行符;不过,这很容易用一个退格键删除。

第二种方法可能会稍微快一点,但是任何涉及Ctrl密钥的东西对我来说似乎都不太像 vim。