【问题标题】:VIM: store output of external command into a registerVIM:将外部命令的输出存储到寄存器中
【发布时间】:2020-01-29 02:20:43
【问题描述】:

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

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

【问题讨论】:

    标签: vim


    【解决方案1】:

    感谢 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>'))).
    • 另请注意,系统需要第二个参数,它将作为标准输入传递给命令,因此您可以例如将视觉选择拉到一个寄存器,然后将该寄存器传递给命令let foo = system("command here", @a)
    【解决方案2】:

    :redir 似乎确实有效,虽然有点笨拙。如果您希望将文件中的数据通过管道传输到外部命令中,这可能会更容易。

    :redir @a
    :w ! ls -1
    :redir END
    "ap
    

    编辑:有趣的是,我刚刚注意到它似乎在 neovim v0.4.3 中对我有用,但在 vim 8.2.100(MacOS 10.15.2,均通过自制软件安装)中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 2020-09-19
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多