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

des*_*ukh 41 vim command-line

在vim中,当我使用

:r !ls somefilename

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

如果我做

let @a = system("ls")

然后

"ap

它仍然在当前行下方的新行中插入输出。

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

dev*_*av2 46

:r !command 
Run Code Online (Sandbox Code Playgroud)

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

但是,如果您在第 3 行,请说。如果您尝试:r !date. 它将日期值插入到第 4 行。

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

  • 这插入了不同的行,但仍然在自己的行上。我想在当前位置插入它! (5认同)

Ste*_*oon 17

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

:let @a=system("ls -l")将把 的输出ls -l放入 register a。然后,您可以将其粘贴(在插入模式下)^R-a


ken*_*orb 16

这是在光标前粘贴外部命令输出的替代方法:

:exe 'norm i' . system("ls -l")
Run Code Online (Sandbox Code Playgroud)

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

"=system('ls -la')
Run Code Online (Sandbox Code Playgroud)

然后打P。或者更短的方式:

<CTRL-R>=system('ls -la')<CR>
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案。 (4认同)