때로는 창을 기존 탭으로 옮겨야 할 때 명령 / 키보드 단축키가 있는지 궁금합니다. 창을 닫고 탭으로 전환 한 다음 새 분할 창에서 열 수 있지만이 작업을 수행하는 더 짧은 방법이 있는지 궁금합니다. 새 탭이 아닌 기존 탭 으로 이동하고 싶습니다 <C-w>T.
때로는 창을 기존 탭으로 옮겨야 할 때 명령 / 키보드 단축키가 있는지 궁금합니다. 창을 닫고 탭으로 전환 한 다음 새 분할 창에서 열 수 있지만이 작업을 수행하는 더 짧은 방법이 있는지 궁금합니다. 새 탭이 아닌 기존 탭 으로 이동하고 싶습니다 <C-w>T.
답변:
현재 탭 페이지에서 기존 창을 이동하는 명령이 있지만 (예 : 회전, 크기 조정 및 이동으로 창 레이아웃에 영향을 미침) 창을 다른 탭으로 이동하는 명령은 없습니다.
창은로드 된 버퍼에 대한 뷰포트 일 뿐이므로 다음을 수행해야합니다.
:close! 창.:sbuffer 버퍼 번호를 다시 엽니 다.이로 인해 창별 옵션이 손실됩니다. 스크립트로 그것들을 저장하고 복원 할 수도 있습니다.
아래 정의 된 두 명령은 모든 버퍼를 오른쪽 탭에서 현재 탭으로 이동 한 다음 오른쪽 탭을 닫습니다. Mtabsp수평 분할 및 Mtabvsp수직 분할로 이동합니다 . 명령을 사용하기 전에 병합 된 탭을 이동해야합니다. 사용 +tabm, -tabm또는 <n>tabm.
아래에 vim 스크립트를 추가하십시오 vimrc:
function! Mtab(vert)
if tabpagenr() == tabpagenr("$")
return 0
endif
+tabnext
let s:killed_tab = tabpagenr()
let s:buf_list = tabpagebuflist()
-tabnext
for item in s:buf_list
if a:vert
vsp
else
sp
endif
execute "buf " . item
endfor
execute "tabclose " . s:killed_tab
endfunction
command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)
Mtab 함수는 하나의 매개 변수를받습니다 vert. 현재 탭이 가로 또는 세로로 분할되는지 여부를 결정합니다.
원하는 결과는 다음 단계로 달성됩니다.
현재 탭이 마지막이면 명령이 무시됩니다.
그것은 만약 파일 버퍼 (작동하지 않습니다 스크래치 , 당신이 할 수있는 버퍼 등) :
:let @f=@%ENTER — 소스 창에서;
:echo @f:e␣Ctrl-RfENTER
중요 사항 : 경로에 공백 이나 특수 문자 가 포함 되어 있으면 마지막 단계 가 올바르게 작동하지 않습니다 ! :-( 해결 방법으로, 공백이있는 경로에는 다음과 같이 약간 더 긴 명령이 작동해야합니다 (다른 특수 문자에서는 여전히 실패 할 수 있음).
:e␣"Ctrl-Rf"ENTER(즉, Ctrl-R 의 결과 인용 , f )
lkraav 및 ingo-karkat의 답변에서 영감을 얻었 습니다 .