[vim] 탭을 재배치하는 vim 명령이 있습니까?

에서 현재 탭의 위치 / 순서를 어떻게 변경 Vim합니까? 예를 들어, 현재 탭을 첫 번째 탭으로 재배치하려면?



답변

:tabm상대 또는 0 인덱스 절대 인수 를 사용하여 탭을 재배치 할 수 있습니다 .

순수한:

  • 탭을 i로 이동 : :tabm i

상대적인:

  • 탭 i 위치를 오른쪽으로 이동 : :tabm +i
  • 탭 i 위치를 왼쪽으로 이동 : :tabm -i

비교적 새로운 기능입니다. 그래도 작동하지 않으면 vim을 업데이트하십시오.


답변

현재 탭을 이동 하시겠습니까? 이것은 tabmove를 사용하여 작동합니다.

:tabm[ove] [N]                                          *:tabm* *:tabmove*
            Move the current tab page to after tab page N.  Use zero to
            make the current tab page the first one.  Without N the tab
            page is made the last one.

현재 탭을 왼쪽이나 오른쪽으로 움직이는 두 개의 키 바인딩이 있습니다. 매우 편리합니다!

편집 : 여기 내 VIM 매크로가 있습니다. 나는 큰 ViM 코더가 아니므로 더 잘 할 수는 있지만 그것이 나를 위해 작동하는 방법입니다.

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    " get number of tab pages.
    let ntp=tabpagenr("$")
    " move tab, if necessary.
    if ntp > 1
        " get number of current tab page.
        let ctpn=tabpagenr()
        " move left.
        if a:direction < 0
            let index=((ctpn-1+ntp-1)%ntp)
        else
            let index=(ctpn%ntp)
        endif

        " move tab page.
        execute "tabmove ".index
    endif
endfunction

그런 다음 키를 바인딩 할 수 있습니다 (예 .vimrc:

map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>

이제 F9 또는 F10을 눌러 현재 탭을 이동할 수 있습니다.


답변

나는 똑같은 것을 찾고 있었고 일부 게시물 후에 함수보다 간단한 방법을 찾았습니다.

:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left

tabpagenr ()는 실제 탭 위치를 반환하고 tabmove 인덱스를 사용합니다.

오른쪽을 Ctrl + L에, 왼쪽을 Ctrl + H에 매핑했습니다.

map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>


답변

현재 탭을 n 번째 위치로 이동

:tabm n

n위치를 나타내는 숫자는 어디에 있습니까 (0에서 시작)


탭을 왼쪽 / 오른쪽으로 이동

더 나은 해결책은 원하는 새 위치의 숫자 값을 알아내는 대신 탭을 왼쪽 또는 오른쪽으로 현재 위치로 옮기는 것입니다.

noremap <A-Left>  :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>

위의 키맵을 사용하면 현재 탭을 이동할 수 있습니다.

  • 왼쪽을 사용하여 : Alt +Left
  • 오른쪽을 사용하여 : Alt +Right

답변

다른 답변의 훌륭한 제안 외에도 마우스 지원을 활성화 한 경우 마우스로 탭을 끌어서 이동할 수도 있습니다.

GUI 위젯 탭 또는 GUI 모드에서 터미널 스타일 탭 사용 여부에 관계없이 MacVim 및 기타 GUI vim 구현에서는 기본적으로 설정되어 있습니다.

또한 set mouse=a적절한 터미널 을 가지고 있고 (예 : gnome-terminal, Terminal.app, iTerm2 및 PuTTY / KiTTY와 같은 xterm 및 대부분의 에뮬레이터) 뷰가있는 경우 순수한 tty 모드 Vim에서 작동합니다 . 열 222 이상의 마우스 클릭에도 필요합니다 set ttymouse=sgr. 볼 에서 빔을되지 않는 이유는 무엇 2백20번째 열 과거 내 마우스를 사용할 수 있습니까? 그것에 대한 배경.

vim-tabber 라는 플러그인을 작성했습니다. 이 도구는 탭을 바꾸고 이동하고 내장 탭 조작 명령의 기능을 추가하는 동시에 내장 기능과 호환되는 추가 기능을 제공합니다. 플러그인을 사용하지 않더라도 README에 일반적인 탭 사용법 정보가 있습니다.


답변

어떤 이유로 함수 응답이 작동하지 않았습니다. vim-ctrlspace 와 충돌이 의심 됩니다. 그럼에도 불구하고 Vim은 내장 함수를 사용하여 탭을 왼쪽과 오른쪽으로 이동할 수 있으므로 함수 답변의 수학은 필요하지 않습니다. Vim은 사용자 친화적이지 않기 때문에 포장 케이스 만 처리하면 됩니다.

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    let s:current_tab=tabpagenr()
    let s:total_tabs = tabpagenr("$")

    " Wrap to end
    if s:current_tab == 1 && a:direction == -1
        tabmove
    " Wrap to start
    elseif s:current_tab == s:total_tabs && a:direction == 1
        tabmove 0
    " Normal move
    else
        execute (a:direction > 0 ? "+" : "-") . "tabmove"
    endif
    echo "Moved to tab " . tabpagenr() . " (previosuly " . s:current_tab . ")"
endfunction

" Move tab left or right using Command-Shift-H or L
map <D-H> :call TabMove(-1)<CR>
map <D-L> :call TabMove(1)<CR>


답변

@maybeshewill의 답변에서 상대 인수를 사용하는 매크로는 다음과 같습니다.

" Shortcuts to move between tabs with Ctrl+Shift+Left/Right
function TabLeft()
   if tabpagenr() == 1
      execute "tabm"
   else
      execute "tabm -1"
   endif
endfunction

function TabRight()
   if tabpagenr() == tabpagenr('$')
      execute "tabm" 0
   else
      execute "tabm +1"
   endif
endfunction

map <silent><C-S-Right> :execute TabRight()<CR>
map <silent><C-S-Left> :execute TabLeft()<CR>

포장 케이스를 처리합니다.