Yanıtlar:
Bir sekmeyi :tabm
göreli veya sıfır dizin mutlak bağımsız değişkenleri kullanarak yeniden konumlandırabilirsiniz .
mutlak:
:tabm i
bağıl:
:tabm +i
:tabm -i
Nispeten yeni bir özellik. Bu yüzden işe yaramazsa viminizi güncellemeyi deneyin.
:tabm
vim 7.3'deki göreceli bağımsız değişkenleri kabul eder.
Mevcut sekmeyi taşımak mı demek istediniz? Bu tabmove kullanarak çalışır.
: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.
Geçerli sekmemi bir sola veya sağa hareket ettiren iki anahtar bağlantım var. Çok kullanışlı!
EDIT: İşte benim VIM makro. Ben büyük bir ViM kodlayıcı değilim , bu yüzden belki daha iyi yapılabilir, ama benim için böyle çalışır:
" 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
Bundan sonra anahtarları bağlayabilirsiniz, örneğin .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Şimdi geçerli sekmenizi F9 veya F10 tuşuna basarak taşıyabilirsiniz.
Ben de aynı şeyi arıyordum ve bazı yayınlardan sonra bir fonksiyondan daha basit bir yol buldum:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Tabpagenr () gerçek sekme konumunu döndürür ve tabmove dizinler kullanır.
Sağı Ctrl + L ve solunu Ctrl + H ile eşledim:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
Sağa gitmek için kullanmak zorunda kaldım . İçin MacVim 8.0.1420 (144) .
:tabm n
n
Konumu gösteren bir sayı nerede (sıfırdan başlayarak)
Daha iyi bir çözüm, sekmeyi, istediğiniz yeni konumun sayısal değerini bulmak yerine sola veya sağa güncel konumuna getirmektir.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Yukarıdaki tuş haritalarıyla mevcut sekmeyi taşıyabilirsiniz:
Diğer yanıtlardaki ince önerilere ek olarak, fare desteğini etkinleştirdiyseniz sekmeleri taşımak için fare ile de sürükleyebilirsiniz.
Bu, GUI widget sekmelerini veya GUI modunda terminal stili sekmelerini kullanıyor olsun, MacVim ve diğer GUI vim uygulamalarında varsayılan olarak açıktır.
Ayrıca, set mouse=a
uygun bir terminaliniz varsa ve varsa (tnom terminali, Terminal.app, iTerm2 ve PuTTY / KiTTY gibi xterm ve çoğu emülatörleri ) saf tty modunda Vim'de çalışır. 222 sütununun ötesindeki fare tıklamalarının da gerektirdiğini unutmayın set ttymouse=sgr
; bkz . Vim'de, farem neden 220. sütunu geçmiyor? arka plan için.
Sekmeleri takas etmek, kaydırmak ve yerleşik sekme manipülasyon komutlarının yeteneklerini eklemek için bazı ek işlevler sağlayan vim-tabber adlı bir eklenti yazdım . Eklentiyi kullanmamayı seçseniz bile, README'de bazı genel sekme kullanım bilgileri vardır.
Bazı nedenlerden dolayı, işlev yanıtı benim için çalışmayı durdurdu. Vim-ctrlspace ile bir çakışma olduğundan şüpheleniyorum . Ne olursa olsun, Vim yerleşik işlevlerle sekmeleri sola ve sağa hareket ettirebildiğinden, işlev yanıtındaki matematik gereksizdir. Sadece sarma kasasını idare etmeliyiz , çünkü Vim kullanıcı dostu değildir.
" 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
Ve +tabm
benim vim 7.4 doğru sekmeleri hareket yok. Ayrıca benim :help tabm
geçerli bir sözdizimi olarak listelemez. Bu yüzden son değiştirildiği else execute ...endif
ile elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
kullanarak Pablo'nun cevabı
tabmove
ve -
/ +
işaretini tersine çevirdim execute
.
İşte @ maybeshewill'in cevabındaki göreceli argümanları kullanarak makrom:
" 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>
Sarma kasasını idare eder.