3

Vim 具有执行程序的内置方式,即:!start foo适用于 Windows 和:!bar &Unix。但是,我遇到的问题是它们从 Vim 中窃取了焦点。我想启动我的构建和测试脚本,虽然它工作并在其命令窗口中显示输出,但不必手动切换回 GVim。

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

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

那么有什么好的方法可以做到这一点呢?我已经尝试过AsyncCommander但不幸的是它也窃取了焦点。

4

2 回答 2

3

当我不使用像sbt监视源代码并为我重新构建/重新测试这样的好构建系统时,我倾向于想出这样的技巧:

 :map <F9> :!touch and-go<CR><CR>

这里点击F9更新文件。选择您喜欢的任何键绑定。(当然你也可以imap对 vim 的插入模式做同样的事情。)

然后只需要一个 shell 脚本来监视这个文件并执行构建/测试您的项目的命令。在 unix 上,我会这样做:

 while stat -c "%Y" and-go; do sleep 1; done | 
 stdbuf -i0 -o0 uniq -c | 
 while read l; do 
    echo build...;  # Your build/test execution commands here.
 done

在单独的窗口中运行它会很整洁,因为您的 vim/gvim 窗口将始终保持其焦点,而您只需继续点击F9(或其他)并查看另一个窗口以查看您的构建情况。

如果您也打算编写 Windows 批处理脚本(或 powershell,我不知道)版本,那么您应该很高兴。

于 2013-01-21T09:30:25.540 回答
1

我认为这应该有效:

:silent! !cmd /c start /b dir

此外,start.exe确实可以选择最小化而不是使用共享/后台控制台。

当然dir是要换了:)

于 2013-01-21T10:38:22.820 回答