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에 넣으세요. 리더를 누른 다음 b를 누르면 시작됩니다. 아직 변경하지 않은 경우 기본 리더는 \입니다.
아마도 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>").

관련 정보