
Básicamente, quiero la siguiente funcionalidad:
al usar la nueva funcionalidad de terminal de vims, quiero poder presionar un botón que abra una nueva ventana de terminal, sin robar el foco del archivo que estoy editando, que compila mi código usando:
"cmake - Bbuild -H.&& cmake --build build/ -- -j4 -w" que me muestra la compilación en vivo y simplemente me permite cerrarla nuevamente usando otro botón cuando ya no la necesito.
Entonces, ¿cómo puedo ejecutar un comando complejo usando :terminal mientras dejo el foco en la división original?
Respuesta1
Hasta donde yo sé, no puedes ahora. Puede ejecutar un comando (comando:ter) o un shell (:ter), pero no puede poner el comando en el shell abierto.
: ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
iniciará la compilación pero deberá volver a la otra ventana con CW w o CW k o CW j o CW h o CW l. Luego podrás continuar escribiendo mientras observas la compilación.
nmap <leader> b :ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
Pon esto en tu .vimrc. Si presiona líder, entonces b lo iniciará. El líder predeterminado es \ si aún no lo cambió.
Probablemente puedas hacerlo con Tmux.
Puedes hacerlo así:
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>
Respuesta2
Puede utilizar la term_sendkeys
función para reutilizar una ventana de terminal abierta. Es un poco molesto que requiera el número de búfer de la terminal, por lo que normalmente abro una terminal justo después de iniciar vim con un archivo. Avíseme si encuentra una manera de crear una asignación de teclado para la función term_sendkeys que no dependa del número de búfer que tenga el terminal.
Abra una nueva ventana de terminal sin robar el foco:
:exec "vert term"|wincmd w
Compila en la terminal sin robar foco:
call term_sendkeys(2, "cmake -Bbuild -H. && cmake --build build/ -- -j4 -w \<Enter>")
.