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の挿入モードでも同じことができます。)

次に必要なのは、このファイルを監視し、プロジェクトをビルド/テストするコマンドを実行するシェルスクリプトだけです。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 に答える