VIM:将外部命令的输出存储到寄存器中

Mat*_*iva 31 vim

是否可以运行外部命令并将其输出存储在寄存器中?

  • :redir 适用于ex命令,不适用于外部命令(afaik)
  • :r ! 运行外部命令但直接将输出插入当前缓冲区

Mat*_*iva 37

感谢vim-use邮件列表上的用户找到了答案:

:let @a = system("ls -l")

使用光标下的文件作为参数运行命令:

:let @a = system("ls -l " . shellescape(expand('<cfile>')))

  • 在构建shell命令时使用`shellescape()`函数是明智的.在这个例子中,`:let @a = system("ls -l".shellescape(expand('<cfile>')))`. (2认同)
  • 另请注意,系统采用第二个参数,它将作为标准输入传输到命令,因此您可以将视觉选择拉到寄存器,然后将寄存器传输到命令 `let foo = system("command here", @a) ` (2认同)