Vim:vsplit并运行外部命令

Vim:vsplit并运行外部命令,vim,Vim,我正在尝试映射一个命令或函数,该命令或函数垂直拆分新窗口,将光标切换到新窗口,并在上运行外部命令 当我这样做时: :vsplit|wincmd w|execute '!perldoc <cWORD>' :vsplit | wincmd w | execute'!佩尔多克' Vim似乎首先在当前窗口中运行外部命令,然后当命令退出时,Vim创建一个新窗口并将焦点切换到该窗口 如果我在一个函数中将这些命令分成单独的行并调用该函数,同样的事情也会发生。有没有办法让Vim做我想让它做的事

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

当我这样做时:

:vsplit|wincmd w|execute '!perldoc <cWORD>'
:vsplit | wincmd w | execute'!佩尔多克'
Vim似乎首先在当前窗口中运行外部命令,然后当命令退出时,Vim创建一个新窗口并将焦点切换到该窗口

如果我在一个函数中将这些命令分成单独的行并调用该函数,同样的事情也会发生。有没有办法让Vim做我想让它做的事

  • 如果不告诉Vim其他情况,默认情况下,新的垂直窗口在左侧打开,将光标留在新窗口中

    如果这不是你的经历,你一定要调查原因

  • :vsplit
    之后,将在呈现新窗口之前执行更多命令,您可以将其想象为“虚拟窗口”

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

    在下面的例子中

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

    看起来一切都按预期进行

  • 我看不到,但你可能有很好的理由打开那扇新窗户。无论如何,我会建议
    :help K
    :help'关键字prg

    set keywordprg=perldoc
    

  • 我的同事Tye向我展示了如何做到这一点:

    让w=expand(“”)vnew执行“read!perldoc”。w|1

    • 另存为变量
      w
    • vnew
      打开一个新的空窗口
    • 执行
      read!perldoc
      w
      作为变量传递。输出被读入新窗口
    • 跳转到新窗口中缓冲区的第一行

    :vsplit
    已将光标放在新窗口中。另外,请检查
    :help K
    :vsplit
    不会在我的计算机上自动将光标放入新窗口。然后您应该调查原因。我为什么要这样做?这不是问题所在……你的同事向你展示了如何做一些不是你要求的事情。