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

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

在 vim 中,当我使用

:r !ls somefilename

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

如果我做

let @a = system("ls")

然后

"ap

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

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

答案1

:r !command 

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

但是假设您在第 3 行。如果您尝试:r !date。它会将日期值插入到第 4 行。

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

答案2

您可以在插入模式下使用 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

答案3

以下是在光标前粘贴外部命令的输出的另一种方法:

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

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

"=system('ls -la')

然后点击P。或者更简单的方法是:

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

答案4

:r命令接受一个行范围,结果将被读入该范围。在 vim 命令行中,.范围中的“ ”表示“当前行”。因此,:r ...相当于:.r ...,表示“将我正在读取的内容放在当前行之后”。

您可以自由地使用基于的表达式指定要写入的范围.。具体来说,您要求的事情应该可以轻松完成:

:.-1r !ls somefilename

相关内容