
基本上我想要以下功能:
使用 vims 新的終端功能,我希望能夠按下一個按鈕,打開一個新的終端窗口,而不從我正在編輯的文件中竊取焦點,使用以下命令編譯我的程式碼:
「cmake - Bbuild -H. && cmake --build build/ -- -j4 -w" 即時顯示編譯結果,並讓我在不再需要時使用另一個按鈕再次關閉它
那麼如何使用 :terminal 執行複雜的指令,同時將焦點保留在原始分割中?
答案1
據我所知你現在不能。您可以執行一個指令(:ter 指令)或一個 shell (:ter),但無法將指令放入開啟的 shell 中。
: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 中。如果你按leader然後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
功能來重複使用開啟的終端機視窗。有點煩人的是它需要終端的緩衝區號,所以我通常在用一個檔案啟動 vim 後立即打開一個終端。如果您找到一種方法來為 term_sendkeys 函數建立不依賴終端的緩衝區編號的鍵盤映射,請告訴我。
開啟一個新的終端機視窗而不竊取焦點:
:exec "vert term"|wincmd w
在終端機中編譯而不竊取焦點:
call term_sendkeys(2, "cmake -Bbuild -H. && cmake --build build/ -- -j4 -w \<Enter>")
。