我正在尝试映射一个命令或函数,该命令或函数可垂直拆分新窗口,将光标切换到新窗口,并在<cWORD>
上运行外部命令。
当我这样做时:
:vsplit|wincmd w|execute '!perldoc <cWORD>'
Vim似乎首先在当前窗口中运行外部命令,然后在命令退出时,Vim创建一个新窗口并将焦点切换到该窗口。
如果我将这些命令分解为一个函数中的不同行并调用该函数,则会发生相同的情况。有办法让Vim做到我想要的吗?
答案 0 :(得分:1)
我的同事Tye向我展示了如何操作:
let w=expand("<cWORD>") | vnew | execute "read !perldoc " . w|1
<cWORD>
保存为变量w
vnew
打开一个新的空白窗口read !perldoc
,并将w
作为变量。输出被读入新窗口答案 1 :(得分:0)
如果您不告诉Vim,默认情况下会在左侧打开新的垂直窗口,将光标留在新窗口中。
如果那不是您所经历的,那么您绝对应该调查原因。
在:vsplit
之后,在呈现新窗口之前,将执行进一步的命令,即可以想象为“虚拟窗口”。
这意味着,无论它有多令人不安,您在下一个命令之前都不会看到新窗口。这就是Vim的工作方式,您对此无能为力。
在下面的示例中……
perl.pl
中有一个我在网上找到的示例perl脚本,warnings.pl
中只有一个单词warnings
,perl.pl
在Vim中打开,光标位于strict
上,:vsplit|!perldoc <cWORD>
,strict
上的文档,并在两个垂直窗口中看到相同的缓冲区,:vsplit warnings.pl|!perldoc <cWORD>
,warnings
上的文档,并在两个垂直窗口中看到两个不同的缓冲区。让我们看看:
看起来一切都按预期进行。
我什么也没看到,但您可能有充分的理由打开新窗口。无论如何,我都会建议:help K
和:help 'keywordprg
:
set keywordprg=perldoc