wie kann ich einen Terminal-Split in Vim 8.1 öffnen, ohne dorthin zu wechseln oder zum vorherigen Split innerhalb eines Vimscripts zurückzukehren

wie kann ich einen Terminal-Split in Vim 8.1 öffnen, ohne dorthin zu wechseln oder zum vorherigen Split innerhalb eines Vimscripts zurückzukehren

Grundsätzlich möchte ich die folgende Funktionalität:
Mithilfe der neuen Terminalfunktionalität von vim möchte ich in der Lage sein, eine Schaltfläche zu drücken, die ein neues Terminalfenster öffnet, ohne den Fokus von der Datei zu stehlen, die ich bearbeite, das meinen Code mit folgendem Befehl kompiliert:
„cmake -Bbuild -H. && cmake --build build/ -- -j4 -w“, das mir die Kompilierung live anzeigt und mich das Fenster mit einer anderen Schaltfläche wieder schließen lässt, wenn ich es nicht mehr benötige

Wie kann ich also einen komplexen Befehl mit :terminal ausführen und dabei den Fokus in der ursprünglichen Aufteilung belassen?

Antwort1

Soweit ich weiß, geht das im Moment nicht. Sie können einen Befehl (:ter-Befehl) oder eine Shell (:ter) ausführen, aber Sie können den Befehl nicht in die offene Shell eingeben.
:ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w
startet den Build, aber Sie müssen mit CW w oder CW k oder CW j oder CW h oder CW l zum anderen Fenster zurückkehren. Dann können Sie weitertippen, während Sie den Build beobachten.

nmap <leader> b :ter cmake -Bbuild -H. && cmake --build build/ -- -j4 -w

Fügen Sie dies in Ihre .vimrc ein. Wenn Sie Leader und dann b drücken, wird es gestartet. Der Standard-Leader ist \, falls Sie ihn noch nicht geändert haben.
Sie können dies wahrscheinlich mit Tmux tun.

Sie können es so machen:

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>

Antwort2

Sie können die Funktion verwenden term_sendkeys, um ein geöffnetes Terminalfenster wiederzuverwenden. Es ist etwas ärgerlich, dass die Puffernummer des Terminals benötigt wird, daher öffne ich normalerweise ein Terminal, gleich nachdem ich vim mit einer Datei gestartet habe. Bitte lassen Sie es mich wissen, wenn Sie eine Möglichkeit finden, eine Tastaturzuordnung für die Funktion term_sendkeys zu erstellen, die nicht von der Puffernummer des Terminals abhängt.

Öffnen Sie ein neues Terminalfenster, ohne den Fokus zu stehlen:

:exec "vert term"|wincmd w

Im Terminal kompilieren, ohne den Fokus zu stehlen:

call term_sendkeys(2, "cmake -Bbuild -H. && cmake --build build/ -- -j4 -w \<Enter>").

verwandte Informationen