답변:
:tabm
상대 또는 0 인덱스 절대 인수 를 사용하여 탭을 재배치 할 수 있습니다 .
순수한:
:tabm i
상대적인:
:tabm +i
:tabm -i
비교적 새로운 기능입니다. 그래도 작동하지 않으면 vim을 업데이트하십시오.
:tabm
vim 7.3에서 상대 인수를 허용 하므로 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>
:execute "tabmove" tabpagenr() + 1 <CR>
오른쪽으로 움직이기 위해 사용해야 했다. 용 MacVim 8.0.1420 (144) .
:tabm n
n
위치를 나타내는 숫자는 어디에 있습니까 (0에서 시작)
더 나은 해결책은 원하는 새 위치의 숫자 값을 알아내는 대신 탭을 왼쪽 또는 오른쪽으로 현재 위치로 옮기는 것입니다.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
위의 키맵을 사용하면 현재 탭을 이동할 수 있습니다.
다른 답변의 훌륭한 제안 외에도 마우스 지원을 활성화 한 경우 마우스로 탭을 끌어서 이동할 수도 있습니다.
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>
tabmove
와 -
/ +
기호를 반대로 바꿨습니다 execute
.
@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>
포장 케이스를 처리합니다.