2

シェルコマンド(コンパイラの実行とシステムの構築を対象とする)を実行し、その出力をキャプチャする必要があるVimプラグインを開発しています。また、コマンドの stdout と stderr を実行時に表示したいので、Ruby を使用してコマンドを実行しています (ただし、Vim の:echoコマンドで表示しているので、stderr のハイライトを設定できます)。

とにかく、ユーザーが途中でコマンドをキャンセルできるようにしたい。プログラムのキャンセルは伝統的に で行われCtrl+C、Vim ではユーザーが をCtrl+Cスローして現在実行中の vimscript をキャンセルすることができますVim:Interrupt。Vim の:sleepコマンドを使用して、ユーザーCtrl+Cが実行中のコマンドをキャンセルしたい場合に押すことを許可し、キャッチしてVim:Interrupt、それに応じて続行したいと考えています。

Ctrl+C私の問題は、挿入モードではないときにVimを押すと、Vimが表示Type :quit<Enter> to exit Vimされ、以前にエコーされたメッセージがすべて消去されることです。これは私にとって問題です。なぜなら、ユーザーが表示をキャンセルする前にコマンドが stdout と stderr に入れた出力を保持したいからです (そして、コマンドがキャンセルされたというメッセージを追加するかもしれません)。

このメッセージを一時的に無効にして、ユーザーが押す前にエコーされたものを保持する方法はありますCtrl+Cか?

4

1 に答える 1

6

マッピングの左側に を追加し<silent>て、コマンド ラインで通常出力されるものを非表示にすることができます。

この場合、次のマッピングが機能するはずです (こちらのようです)。

nnoremap <C-c> <silent> <C-c>
于 2013-01-13T21:36:06.823 に答える