Jawaban:
Anda dapat merelokasi tab dengan :tabm
menggunakan argumen absolut relatif atau indeks nol.
mutlak:
:tabm i
relatif:
:tabm +i
:tabm -i
Ini fitur yang relatif baru. Jadi, jika tidak berhasil coba perbarui vim Anda.
:tabm
menerima argumen relatif dalam vim 7.3.
Apakah maksud Anda memindahkan tab saat ini? Ini berfungsi menggunakan 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.
Saya memiliki dua binding kunci yang menggerakkan tab saya saat ini satu kiri atau satu kanan. Sangat berguna!
EDIT: Ini makro VIM saya. Saya bukan pembuat kode besar ViM , jadi mungkin itu bisa dilakukan dengan lebih baik, tapi begitulah cara kerjanya bagi saya:
" 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
Setelah ini, Anda dapat mengikat kunci, misalnya seperti ini di .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Sekarang Anda dapat memindahkan tab saat ini dengan menekan F9 atau F10.
Saya mencari yang sama dan setelah beberapa posting saya menemukan cara yang lebih sederhana daripada fungsi:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
The tabpagenr () mengembalikan posisi tab yang sebenarnya, dan tabmove menggunakan indeks.
Saya memetakan kanan untuk Ctrl + L dan kiri untuk Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
untuk bergerak ke kanan. Untuk MacVim 8.0.1420 (144) .
:tabm n
Di mana n
angka yang menunjukkan posisi (mulai dari nol)
Saya pikir solusi yang lebih baik adalah dengan memindahkan tab ke kiri atau kanan ke posisi saat ini daripada mencari tahu nilai numerik dari posisi baru yang Anda inginkan.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Dengan keymaps di atas, Anda dapat memindahkan tab saat ini:
Selain saran bagus dalam jawaban lain, Anda juga dapat dengan mudah menyeret tab dengan mouse untuk memindahkannya, jika dukungan mouse Anda diaktifkan.
Ini diaktifkan secara default di MacVim dan implementasi vim GUI lainnya, apakah menggunakan tab widget GUI atau tab gaya terminal dalam mode GUI.
Ini juga berfungsi dalam mode tty murni Vim, jika Anda memiliki set mouse=a
dan memiliki terminal yang sesuai (xterm dan sebagian besar emulatornya, seperti gnome-terminal, Terminal.app, iTerm2, dan PuTTY / KiTTY, untuk menyebutkan tampilan). Perhatikan bahwa klik mouse di luar kolom 222 juga memerlukan set ttymouse=sgr
; lihat Di Vim, mengapa mouse saya tidak berfungsi melewati kolom ke-220? untuk latar belakang itu.
Saya telah menulis sebuah plugin bernama vim-tabber yang menyediakan beberapa fungsionalitas tambahan untuk bertukar tab, menggesernya, dan menambah kemampuan perintah manipulasi tab bawaan, sementara sebagian besar tetap kompatibel dengan builtin. Bahkan jika Anda memilih untuk tidak menggunakan plugin, ada beberapa informasi penggunaan tab umum di README.
Untuk beberapa alasan, jawaban fungsi berhenti bekerja untuk saya. Saya menduga ada konflik dengan vim-ctrlspace . Apapun, matematika dalam fungsi jawaban tidak perlu, karena Vim dapat memindahkan tab ke kiri dan ke kanan dengan fungsi bawaan. Kami hanya harus menangani bungkusnya , karena Vim tidak ramah pengguna.
" 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
dan +tabm
dalam vim saya 7.4 tidak benar memindahkan tab. Juga saya :help tabm
tidak mencantumkan ini sebagai sintaks yang valid. Jadi saya mengganti yang terakhir else execute ...endif
dengan elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
menggunakan jawaban Pablo
tabmove
dan -
/ +
tanda di execute
garis.
Inilah makro saya, menggunakan argumen relatif dari jawaban @ 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>
Ini menangani kasing.