【问题标题】:Vim: vsplit and run external commandVim:vsplit 并运行外部命令
【发布时间】:2018-06-30 17:08:29
【问题描述】:

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

当我这样做时:

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

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

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

【问题讨论】:

  • :vsplit 已经将光标放在新窗口中。另外,请查看:help K
  • :vsplit 不会将光标自动放在我机器上的新窗口中。
  • 那你应该调查原因。
  • 我为什么要这样做?这不是这里的问题...

标签: vim


【解决方案1】:

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

let w=expand("&lt;cWORD&gt;") | vnew | execute "read !perldoc " . w|1

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

【讨论】:

  • 你的同事向你展示了如何做一些你没有做的事情。
【解决方案2】:
  1. 如果你不告诉 Vim,默认在左侧打开新的垂直窗口,将光标留在新窗口中。

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

  2. :vsplit 之后,在渲染新窗口之前执行更多命令,您可以将其想象为“虚拟窗口”。

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

    在下面的例子中……

    • 我在同一个目录中有两个 perl 文件,
    • perl.pl 中有一个我在网上找到的示例 perl 脚本,
    • warnings.pl 中有一个词,warnings
    • perl.pl 在 Vim 中打开,光标在 strict
    • 我跑:vsplit|!perldoc &lt;cWORD&gt;
    • 我希望在我的寻呼机中看到关于 strict 的文档,并且当我回到 Vim 时,相同的缓冲区会显示在两个垂直窗口中,
    • 我关闭左侧窗口,
    • 我跑:vsplit warnings.pl|!perldoc &lt;cWORD&gt;
    • 当我回到 Vim 时,我希望在我的寻呼机中看到关于 warnings 的文档,并在两个垂直窗口中显示两个不同的缓冲区。

    让我们看看:

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

  3. 我没有看到任何内容,但您可能有充分的理由打开该新窗口。我会建议:help K:help 'keywordprg 反正:

    set keywordprg=perldoc
    

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多