Câu trả lời:
Bạn có thể định vị lại một tab bằng :tabm
cách sử dụng các đối số tuyệt đối tương đối hoặc không có chỉ mục.
tuyệt đối:
:tabm i
quan hệ:
:tabm +i
:tabm -i
Đây là một tính năng tương đối mới. Vì vậy, nếu nó không hoạt động hãy thử cập nhật vim của bạn.
:tabm
chấp nhận các đối số tương đối trong vim 7.3.
Bạn có nghĩa là di chuyển các tab hiện tại? Điều này hoạt động bằng cách sử dụng 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.
Tôi có hai ràng buộc chính di chuyển tab hiện tại của tôi một bên trái hoặc một bên phải. Rất tiện dụng!
EDIT: Đây là macro VIM của tôi. Tôi không phải là một lập trình viên ViM lớn , vì vậy có lẽ nó có thể được thực hiện tốt hơn, nhưng đó là cách nó hoạt động với tôi:
" 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
Sau này, bạn có thể liên kết các khóa, ví dụ như thế này trong .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Bây giờ bạn có thể di chuyển tab hiện tại của mình bằng cách nhấn F9 hoặc F10.
Tôi đã tìm kiếm tương tự và sau một số bài viết, tôi tìm thấy một cách đơn giản hơn một chức năng:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Các tabpagenr () trả về vị trí tab thực tế, và tabmove sử dụng chỉ mục.
Tôi ánh xạ bên phải sang Ctrl + L và bên trái sang Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
để di chuyển sang phải. Đối với MacVim 8.0.1420 (144) .
:tabm n
Trường hợp n
một số biểu thị vị trí (bắt đầu từ số không)
Tôi nghĩ rằng một giải pháp tốt hơn là di chuyển tab sang trái hoặc phải sang vị trí hiện tại thay vì tìm ra giá trị bằng số của vị trí mới mà bạn muốn.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Với các keymap trên, bạn sẽ có thể di chuyển tab hiện tại:
Ngoài các gợi ý hay trong các câu trả lời khác, bạn cũng có thể chỉ cần kéo các tab bằng chuột để di chuyển chúng, nếu bạn đã bật hỗ trợ chuột.
Điều này được bật theo mặc định trong MacVim và các cài đặt GUI vim khác, cho dù sử dụng tab tiện ích GUI hoặc tab kiểu thiết bị đầu cuối trong chế độ GUI.
Nó cũng hoạt động ở chế độ tty thuần Vim, nếu bạn có set mouse=a
và có một thiết bị đầu cuối phù hợp (xterm và hầu hết các trình giả lập của nó, chẳng hạn như gnome-terminal, Terminal.app, iTerm2 và PuTTY / KiTTY, để đặt tên cho chế độ xem). Lưu ý rằng nhấp chuột ngoài cột 222 cũng yêu cầu set ttymouse=sgr
; xem Trong Vim, tại sao chuột của tôi không hoạt động qua cột thứ 220? cho nền tảng trên đó.
Tôi đã viết một plugin có tên vim-tabber cung cấp một số chức năng bổ sung để hoán đổi các tab xung quanh, dịch chuyển chúng và thêm vào các khả năng của các lệnh thao tác tab tích hợp, trong khi vẫn tương thích với các nội trang. Ngay cả khi bạn chọn không sử dụng plugin, vẫn có một số thông tin sử dụng tab chung trong README.
Vì một số lý do, câu trả lời hàm ngừng hoạt động đối với tôi. Tôi nghi ngờ có xung đột với vim-ctrlspace . Bất kể, toán học trong câu trả lời hàm là không cần thiết, vì Vim có thể di chuyển các tab sang trái và phải với các hàm tích hợp. Chúng tôi chỉ phải xử lý trường hợp gói , vì Vim không thân thiện với người dùng.
" 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>
-tabm
và +tabm
trong vim tôi 7.4 không di chuyển một cách chính xác các tab. Ngoài ra của tôi :help tabm
không liệt kê đây là một cú pháp hợp lệ. Vì vậy, tôi đã thay thế câu cuối else execute ...endif
bằng elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
cách sử dụng câu trả lời của Pablo
tabmove
và dấu -
/ +
trong execute
dòng.
Đây là macro của tôi, sử dụng các đối số tương đối từ câu trả lời của @ 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>
Nó xử lý các trường hợp gói.