जवाबों:
आप :tabm
सापेक्ष या शून्य-इंडेक्स निरपेक्ष तर्कों का उपयोग करके टैब को स्थानांतरित कर सकते हैं ।
पूर्ण:
:tabm i
रिश्तेदार:
:tabm +i
:tabm -i
यह एक अपेक्षाकृत नई सुविधा है। तो अगर यह काम नहीं करता है अपने विम को अद्यतन करने का प्रयास करें।
:tabm
विम 7.3 में रिश्तेदार तर्क स्वीकार करते हैं।
क्या आपका मतलब मौजूदा टैब को हिलाना है? यह वर्जित का उपयोग कर काम करता है।
: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 मैक्रो है। मैं एक बड़ा वीआईएम कोडर नहीं हूं , इसलिए शायद इसे बेहतर किया जा सकता है, लेकिन यह मेरे लिए कैसे काम करता है:
" 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
स्थिति को निरूपित करते हुए एक संख्या कहां है (शून्य से शुरू)
मुझे लगता है कि एक बेहतर समाधान यह है कि आप जिस नई स्थिति में चाहते हैं उसके संख्यात्मक मान का पता लगाने के बजाय टैब को उसकी वर्तमान स्थिति में बाईं या दाईं ओर ले जाएं।
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
उपरोक्त कीमैप के साथ, आप वर्तमान टैब को स्थानांतरित करने में सक्षम होंगे:
अन्य उत्तरों में ठीक सुझावों के अलावा, आप माउस को ले जाने के लिए टैब को भी खींच सकते हैं, यदि आपके पास माउस सपोर्ट सक्षम है।
यह मैकविम और अन्य जीयूआई विम कार्यान्वयन में डिफ़ॉल्ट रूप से है, चाहे जीयूआई विजेट टैब या जीयूआई मोड में टर्मिनल स्टाइल टैब का उपयोग कर रहा हो।
यह शुद्ध tty मोड Vim में भी काम करता है, अगर आपके पास set mouse=a
एक उपयुक्त टर्मिनल (xterm और इसके अधिकांश एमुलेटर हैं, जैसे कि gnome-टर्मिनल, Terminal.app, iTerm2, और PuTTY / KiTTY, एक दृश्य का नाम देने के लिए)। ध्यान दें कि कॉलम 222 से परे माउस को भी आवश्यकता होती है set ttymouse=sgr
; विम में देखें , मेरा माउस 220 वें कॉलम से आगे क्यों नहीं बढ़ रहा है? उस पर पृष्ठभूमि के लिए।
मैंने vim-tabber नामक एक प्लगइन लिखा है जो कि टैब को स्वैप करने, उन्हें शिफ्ट करने और बिल्ट-इन टैब मैनिपुलेशन कमांड की क्षमताओं को जोड़ने के लिए कुछ अतिरिक्त कार्यक्षमता प्रदान करता है, जबकि बिल्टइन के साथ काफी हद तक संगत है। यहां तक कि अगर आप प्लगइन का उपयोग नहीं करना चुनते हैं, तो README में कुछ सामान्य टैब उपयोग की जानकारी है।
किसी कारण से, फ़ंक्शन जवाब ने मेरे लिए काम करना बंद कर दिया। मुझे vim-ctrlspace के साथ संघर्ष पर संदेह है । भले ही, फंक्शन उत्तर में गणित अनावश्यक हो, क्योंकि विम फंक्शंस में बिल्ट-इन और लेफ्ट राइट को ले जा सकता है। हमें सिर्फ रैपिंग मामले को संभालना है , क्योंकि विम उपयोगकर्ता के अनुकूल नहीं है।
" 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
और +tabm
मेरी vim 7.4 में सही ढंग से टैब के लिए कदम नहीं है। इसके अलावा मेरी :help tabm
यह एक वैध वाक्य रचना के रूप में सूचीबद्ध नहीं है। इसलिए मैं पिछले प्रतिस्थापित else execute ...endif
के साथ elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
का उपयोग कर पाब्लो का जवाब
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>
यह रैपिंग केस को हैंडल करता है।