как открыть разделение терминала в vim 8.1, не переключаясь на него или не возвращаясь к предыдущему разделению внутри vimscript

как открыть разделение терминала в vim 8.1, не переключаясь на него или не возвращаясь к предыдущему разделению внутри vimscript

В основном мне нужна следующая функциональность:
используя новую функциональность терминала 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>").

Связанный контент