
В основном мне нужна следующая функциональность:
используя новую функциональность терминала vims, я хочу иметь возможность нажать кнопку, которая откроет новое окно терминала, не отвлекая фокус от редактируемого мной файла, которая скомпилирует мой код с помощью:
"cmake -Bbuild -H. && cmake --build build/ -- -j4 -w", которая покажет мне компиляцию в реальном времени и позволит мне просто закрыть ее с помощью другой кнопки, когда она мне больше не нужна.
Так как же мне выполнить сложную команду с помощью :terminal, оставив фокус в исходном разделе?
решение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. Если вы нажмете leader, то b, он запустится. По умолчанию leader — \, если вы его еще не изменили.
Вы, вероятно, можете сделать это с помощью 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>")
.