기존 창을 기존 탭으로 이동


14

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


탭간에 창을 이동할 수 없습니다.
lcd047

흠, 너무 나쁘다. 나는 아마 그것을 달성 할 수있는 매핑이나 명령을 만들 수 있습니다.
EvergreenTree

최선의 방법은 모든 창 설정을 저장 한 다음 기존 탭에서 다시 만드는 것입니다.
tommcdo

답변:


10

현재 탭 페이지에서 기존 창을 이동하는 명령이 있지만 (예 : 회전, 크기 조정 및 이동으로 창 레이아웃에 영향을 미침) 창을 다른 탭으로 이동하는 명령은 없습니다.

창은로드 된 버퍼에 대한 뷰포트 일 뿐이므로 다음을 수행해야합니다.

  1. 현재 창에 표시된 버퍼 번호를 참고하십시오.
  2. :close! 창.
  3. 기존 대상 탭 페이지로 전환하십시오.
  4. :sbuffer 버퍼 번호를 다시 엽니 다.

이로 인해 창별 옵션이 손실됩니다. 스크립트로 그것들을 저장하고 복원 할 수도 있습니다.


나는 이것이 사실이라고 생각했다. 나는 아마도 그것을 정확하게하는 작은 스크립트를 만들 수 있습니다.
EvergreenTree

2
  1. 기존 대상 탭으로 이동
  2. 당신이 원하는 그러나 그것을 분할
  3. :b ab(나머지 탭 완성)

ab임의의 문자 일 뿐이므로 원하는 파일 이름의 시작 부분으로 바꾸십시오. :b탭 완성은 나를 위해 아주 잘 수행되었습니다. 일반적으로 단 하나의 문자와 1-2 Tab키 누름을 기준으로 올바른 소스 버퍼를 찾을 수 있습니다.

Ingo에 비해이 접근 방식의 이점은인지 능력이 떨어지는 것을 의미하거나 기억하지 못하는 것입니다. 어쨌든 이미 알고있는 파일 이름입니다.


2

아래 정의 된 두 명령은 모든 버퍼를 오른쪽 탭에서 현재 탭으로 이동 한 다음 오른쪽 탭을 닫습니다. 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. 현재 탭이 가로 또는 세로로 분할되는지 여부를 결정합니다.

원하는 결과는 다음 단계로 달성됩니다.

  1. 일시적으로 다음 탭으로 이동
  2. 두 개의 변수를 사용하여 탭 번호와 버퍼를 참조하십시오.
  3. 현재 탭으로 돌아 가기
  4. 탭을 나누고 각 버퍼를 엽니 다
  5. 마지막으로 오른쪽 탭을 닫습니다

현재 탭이 마지막이면 명령이 무시됩니다.


1

그것은 만약 파일 버퍼 (작동하지 않습니다 스크래치 , 당신이 할 수있는 버퍼 등) :

  1. :let @f=@%ENTER — 소스 창에서;
    • 이것은 일반 레지스터 f의 내용을 현재 파일 이름을 포함하는 특수 레지스터 % 의 내용으로 대체합니다 .
    • 참고 : file 에서처럼 레지스터 f 를 선택 했지만 원하는 다른 레지스터를 사용할 수 있습니다.
    • 다음을 사용하여 레지스터에 올바른 경로가 포함되어 있는지 확인할 수 있습니다. :echo @f
  2. 선택적으로 : Ctrl-WCtrl-Q— 이전 창을 닫습니다.
  3. gt/ gT— 대상 탭 (및 창)으로 이동합니다.
  4. Ctrl-Ws — 원하는 방식으로 탭을 분할하여 새 창을 엽니 다.
  5. :e␣Ctrl-RfENTER
    • 새로 열린 창에서 레지스터 f에 저장된 경로에서 파일을로드합니다 .
    • 참고 : 여기서 ␣ 문자는 일반적인 공백을 나타냅니다.

중요 사항 : 경로에 공백 이나 특수 문자 가 포함 되어 있으면 마지막 단계 가 올바르게 작동하지 않습니다 ! :-( 해결 방법으로, 공백이있는 경로에는 다음과 같이 약간 더 긴 명령이 작동해야합니다 (다른 특수 문자에서는 여전히 실패 할 수 있음).

  • :e␣"Ctrl-Rf"ENTER

(즉, Ctrl-R 의 결과 인용 , f )

lkraavingo-karkat의 답변에서 영감을 얻었 습니다 .


이것은 환상적입니다. Windows의 "잘라 내기 및 붙여 넣기"를 탭에 매핑하기 위해 매핑을 설정해야합니다.
dragon788
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.