
Basicamente eu quero a seguinte funcionalidade:
Usando a nova funcionalidade do terminal do vims, quero poder pressionar um botão, que abre uma nova janela do terminal, sem roubar o foco do arquivo que estou editando, que compila meu código usando:
"cmake - Bbuild -H. && cmake --build build/ -- -j4 -w" que me mostra a compilação ao vivo e me permite fechá-la novamente usando outro botão quando não precisar mais dela
Então, como posso executar um comando complexo usando :terminal deixando o foco na divisão original?
Responder1
Pelo que eu sei, você não pode agora. Você pode executar um comando (comando:ter) ou um shell (:ter), mas não pode colocar o comando no shell aberto.
:ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
iniciará a compilação, mas você terá que voltar para a outra janela com CW w ou CW k ou CW j ou CW h ou CW l. Então você pode continuar digitando enquanto observa a construção.
nmap <leader> b :ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
Coloque isso em seu .vimrc. Se você pressionar líder, b ele iniciará. O líder padrão é \ se você ainda não o alterou.
Você provavelmente pode fazer isso com o Tmux.
Você pode fazer assim:
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>
Responder2
Você pode usar a term_sendkeys
função para reutilizar uma janela de terminal aberta. É um pouco chato exigir o número do buffer do terminal, então normalmente abro um terminal logo depois de iniciar o vim com um arquivo. Por favor, deixe-me saber se você descobrir uma maneira de criar um mapeamento de teclado para a função term_sendkeys que não dependa de qual número de buffer o terminal possui.
Abra uma nova janela de terminal sem roubar o foco:
:exec "vert term"|wincmd w
Compile no terminal sem roubar o foco:
call term_sendkeys(2, "cmake -Bbuild -H. && cmake --build build/ -- -j4 -w \<Enter>")
.