假设 Vim 中的当前行包含:
ls /home
(或任何 shell 命令)。那么,有什么方法可以快速将此行发送到 (bash) shell 并在 Vim 中读取结果?并且无需使用插件。
答案1
最简单的方法是将 放在:!
行首(使用I:!
),然后yy
将该行拖入未命名寄存器,最后使用@"
将未命名("
)寄存器作为宏调用。对于 vim,这完全等同于输入
:!ls /home
在正常模式下。如果你像我一样,在 .vimrc 中;
切换:
为正常模式,那么你必须插入一个分号。
可能可以就地改变寄存器,而不是将其添加到实际的行前面。
也可以通过y$
拖拽到行尾(不进行上述编辑)然后输入
:!<c-r>"
...(<c-r>
意思是Ctrl+ r)将扩展为
:!ls /home
(或您提取的任何命令)。您需要使用y$
而不是,yy
因为否则它将扩展为
:ls /home^M
^M
代表换行符;不过,只需按一次退格键即可轻松删除。
第二种方法可能稍微快一些,但任何涉及Ctrl按键的东西对我来说似乎都不太像 vim。
答案2
您可以通过简单调用将当前行作为命令发送:
:.!bash -e
打开的缓冲区中的行将被该命令的输出替换。
如果您希望保留原始行,则可以使用以下命令将输出发送到另一个缓冲区:
:.w !bash -e
答案3
将结果附加到该行下方
您只需按六个键即可完成此操作::r!<C-R><C-L><CR>
用结果替换该行:
您只需按五下键即可完成此操作:!!<C-R><C-L><CR>
但这也会将该行本身作为标准输入提供给命令,因此可能会产生副作用。为了防止这种情况发生,您可以这样做0D!!<C-R>"<CR>