在vim的当前位置插入系统命令的输出


33

在vim中,当我使用

:r !ls somefilename

它将命令的输出插入到当前行下方的新行中。

如果我做

let @a = system("ls")

然后

"ap

仍然将输出插入到当前行下方的新行中。

有没有办法让vim在当前位置插入输出?


参考这个有用的答案从vim中以bash执行当前行
Rohan Ghige

Answers:


14

您可以在插入模式下使用Ctrl-R *将剪贴板缓冲区的内容粘贴在字符之间(其他缓冲区也可以使用类似的方法)。因此,如果可以将系统命令放入缓冲区,则应该进行设置。(来源:https : //stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position)。

:let @a=system("ls -l")会将输出ls -l放入寄存器a。然后,您可以使用粘贴(在插入模式下)^R-a


另外,在大多数平台上,剪贴板都与寄存器(通常为*)同步,因此,如果将命令输出通过管道传输到剪贴板,则可以"*使用它。
布鲁诺·布罗诺斯基

39
:r !command 

将从命令中读取输出,并将其插入到当前行下方的行中。这是vi编程的方式,您无法更改行为。

但是,请说您是否在第3行中:r !date。它将日期值插入第4行。

如果您希望日期值出现在第3行上,则尝试:2r !date将日期值插入第3行。


4
该插入在另一行上,但仍在其自己的行上。我想将其插入当前位置!
deshmukh

13

这是将外部命令的输出粘贴到光标之前的另一种方法:

:exe 'norm i' . system("ls -l")

或使用表达式寄存器(:help @=):

"=system('ls -la')

然后打P。或更短的方法:

<CTRL-R>=system('ls -la')<CR>

4
这就是答案。
雅各布

1
同意!这实际上应该是正确的答案,因为它包含了:exe可以在命令中包含的更具编程性的解决方案(带有)。
metasoarous
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.