有没有一个好方法可以在不失去焦点的情况下从gvim启动程序?

有没有一个好方法可以在不失去焦点的情况下从gvim启动程序?,vim,Vim,Vim有一种执行程序的内置方式,即:!启动Windows的foo,:!用于Unix的条形图&。然而,我的问题是,它们从Vim窃取了焦点。我想启动我的构建和测试脚本,当它工作并在命令窗口中显示输出时,永远不需要手动切换回GVim 我想到了3种可能的解决方案: 使用Auto It/Auto热键将焦点设置回Gvim。不幸的是,这只适用于Windows,而且很脆弱 让另一个进程监视我的源代码,并让该进程在源代码更改时自动启动脚本。(另一个创建新窗口的进程不会窃取焦点)。这有点花招,因为您需要推迟编写文

Vim有一种执行程序的内置方式,即
:!启动Windows的foo
:!用于Unix的条形图&
。然而,我的问题是,它们从Vim窃取了焦点。我想启动我的构建和测试脚本,当它工作并在命令窗口中显示输出时,永远不需要手动切换回GVim

我想到了3种可能的解决方案:

  • 使用Auto It/Auto热键将焦点设置回Gvim。不幸的是,这只适用于Windows,而且很脆弱
  • 让另一个进程监视我的源代码,并让该进程在源代码更改时自动启动脚本。(另一个创建新窗口的进程不会窃取焦点)。这有点花招,因为您需要推迟编写文件,直到您想要启动脚本,如果您想要重新测试,有时甚至需要编写一个无用的更改,即使源代码中没有任何更改
  • 使用客户机-服务器体系结构,其中Vim通过套接字或类似的方式发送命令。如果有任何现有的跨平台方法,这实际上是我的首选解决方案。(不过,我不希望为此运行额外的GVim实例。)

那么,做这件事的好方法是什么呢?我已经尝试过,但不幸的是,它也窃取了关注点。

当我没有使用像
sbt
这样的好的构建系统为我查看源代码并重新构建/重新测试时,我倾向于想出如下方法:

 :map <F9> :!touch and-go<CR><CR>
在一个单独的窗口中运行它会很好,因为您的vim/gvim窗口将始终保持它的焦点,而您只需不断点击
F9
(或其他)并浏览另一个窗口来查看构建过程


如果您还想编写windows批处理脚本(或powershell,我不知道)版本,那么您应该可以开始了。

我认为这应该可以:

:silent! !cmd /c start /b dir
另外,
start.exe
确实有一个启动最小化的选项,而不是使用共享/后台控制台


当然,
dir
将被替换:)

您是否尝试更改窗口管理器的设置,使其不会将焦点放在新创建的窗口上?我从未听说过
:start
。我的gvim 7.3不支持它。@DidierTrosset这是一个非常聪明的想法,但它不应该一直这样工作(我通常想要关注新窗口,即使是从Vim创建的窗口)。@sehe哎呀,我的坏,它应该是
:!开始
。不幸的是,当我不使用最小化选项时,焦点仍然丢失,并且能够看到结果非常重要。Erm。也许你应该让vim窗口成为“始终在顶部”的工具之一,这是可能的,但问题不是“始终在顶部”,而是保持焦点。它可以用自动热键来完成,但这看起来很粗糙而且不便于携带。@Daan-Yah,我知道。努力帮助别人。此外,这与可移植性无关。任何涉及窗口放置的东西都不会是可移植的。我恐怕你会发现所有的解决方案都是不可靠的。不过,请看,我认为您可以“发送”命令以在现有屏幕会话中运行。这是一个相当不错的解决方案,比我自己提出的解决方案更聪明。我唯一不喜欢的是它是轮询的,不可移植。难道没有比“自己动手”更好的方法吗?是的,投票太糟糕了。在我看来,如果您希望在启动另一个构建/测试脚本时保持焦点,那么您将希望该构建/测试脚本在另一个窗口中运行。这意味着需要从您的某个信号(从
vim
)启动它。我通常更喜欢小脚本而不是GUI应用程序。我相信这是目前最好的选择,谢谢你的帮助。
:silent! !cmd /c start /b dir