Vim:vsplit并运行外部命令

时间:2018-06-30 17:08:30

标签: vim

我正在尝试映射一个命令或函数,该命令或函数可垂直拆分新窗口,将光标切换到新窗口,并在<cWORD>上运行外部命令。

当我这样做时:

:vsplit|wincmd w|execute '!perldoc <cWORD>'

Vim似乎首先在当前窗口中运行外部命令,然后在命令退出时,Vim创建一个新窗口并将焦点切换到该窗口。

如果我将这些命令分解为一个函数中的不同行并调用该函数,则会发生相同的情况。有办法让Vim做到我想要的吗?

2 个答案:

答案 0 :(得分:1)

我的同事Tye向我展示了如何操作:

let w=expand("<cWORD>") | vnew | execute "read !perldoc " . w|1

  • <cWORD>保存为变量w
  • vnew打开一个新的空白窗口
  • 执行read !perldoc,并将w作为变量。输出被读入新窗口
  • 跳转到新窗口中缓冲区的第一行

答案 1 :(得分:0)

  1. 如果您不告诉Vim,默认情况下会在左侧打开新的垂直窗口,将光标留在新窗口中。

    :vsplit

    如果那不是您所经历的,那么您绝对应该调查原因。

  2. :vsplit之后,在呈现新窗口之前,将执行进一步的命令,即可以想象为“虚拟窗口”。

    这意味着,无论它有多令人不安,您在下一个命令之前都不会看到新窗口。这就是Vim的工作方式,您对此无能为力。

    在下面的示例中……

    • 我在同一目录中有两个perl文件,
    • perl.pl中有一个我在网上找到的示例perl脚本,
    • warnings.pl中只有一个单词warnings
    • perl.pl在Vim中打开,光标位于strict上,
    • 我运行:vsplit|!perldoc <cWORD>
    • 当我回到Vim时,我希望能在我的寻呼机中看到strict上的文档,并在两个垂直窗口中看到相同的缓冲区,
    • 我关闭左窗口,
    • 我运行:vsplit warnings.pl|!perldoc <cWORD>
    • 当我回到Vim时,希望能在我的寻呼机中看到warnings上的文档,并在两个垂直窗口中看到两个不同的缓冲区。

    让我们看看:

    :vsplit2

    看起来一切都按预期进行。

  3. 我什么也没看到,但您可能有充分的理由打开新窗口。无论如何,我都会建议:help K:help 'keywordprg

    set keywordprg=perldoc