vim 8.1 でターミナル分割を開くにはどうすればよいですか。切り替えたり、vimscript 内の前の分割に戻ったりする必要はありません。

vim 8.1 でターミナル分割を開くにはどうすればよいですか。切り替えたり、vimscript 内の前の分割に戻ったりする必要はありません。

基本的に、次の機能が必要です。vim
の新しいターミナル機能を使用して、編集中のファイルからフォーカスを奪うことなく、新しいターミナル ウィンドウを開くボタンを押し、
"cmake -Bbuild -H. && cmake --build build/ -- -j4 -w" を使用してコードをコンパイルし、コンパイルをライブで表示し、不要になったら別のボタンを使用して閉じることができるようにします。

では、元の分割にフォーカスを残したまま、:terminal を使用して複雑なコマンドを実行するにはどうすればよいでしょうか?

答え1

私の知る限り、現時点ではできません。1 つのコマンド (:ter コマンド) またはシェル (:ter) を実行することはできますが、開いているシェルにコマンドを入力することはできません。
:ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w は
ビルドを開始しますが、CW w または CW k または CW j または CW h または CW l を使用して別のウィンドウに戻る必要があります。その後、ビルドを監視しながら入力を続けることができます。

nmap <leader> b :ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w

これを .vimrc に記述します。リーダーを押してから b を押すと起動します。まだ変更していない場合、デフォルトのリーダーは \ です。
おそらく Tmux で実行できます。

次のように実行できます:

function! s:Buildit()
  ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
  wincmd w 
endfunction
com! Buildit call s:Buildit()
nnoremap <leader> b :Buildit<CR>

答え2

開いているターミナル ウィンドウを再利用する関数を使用できますterm_sendkeys。ターミナルのバッファ番号が必要なのが少し面倒なので、私は通常、1 つのファイルで vim を起動した直後にターミナルを開きます。ターミナルのバッファ番号に依存しない term_sendkeys 関数のキーボード マッピングを作成する方法がわかったら、お知らせください。

フォーカスを奪わずに新しいターミナル ウィンドウを開きます。

:exec "vert term"|wincmd w

フォーカスを奪わずにターミナルでコンパイルします。

call term_sendkeys(2, "cmake -Bbuild -H. && cmake --build build/ -- -j4 -w \<Enter>")

関連情報