将结果附加到该行下方

将结果附加到该行下方

假设 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>

相关内容