때로는 창을 기존 탭으로 옮겨야 할 때 명령 / 키보드 단축키가 있는지 궁금합니다. 창을 닫고 탭으로 전환 한 다음 새 분할 창에서 열 수 있지만이 작업을 수행하는 더 짧은 방법이 있는지 궁금합니다. 새 탭이 아닌 기존 탭 으로 이동하고 싶습니다 <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의 답변에서 영감을 얻었 습니다 .