ฉันจะเปลี่ยนตำแหน่ง / คำสั่งของแท็บปัจจุบันได้Vim
อย่างไร ตัวอย่างเช่นหากฉันต้องการเปลี่ยนตำแหน่งแท็บปัจจุบันของฉันให้เป็นแท็บแรก
ฉันจะเปลี่ยนตำแหน่ง / คำสั่งของแท็บปัจจุบันได้Vim
อย่างไร ตัวอย่างเช่นหากฉันต้องการเปลี่ยนตำแหน่งแท็บปัจจุบันของฉันให้เป็นแท็บแรก
คำตอบ:
คุณสามารถเปลี่ยนตำแหน่งแท็บ:tabm
โดยใช้อาร์กิวเมนต์สัมบูรณ์แบบสัมพันธ์หรือแบบศูนย์ดัชนีก็ได้
แน่นอน:
:tabm i
ญาติ:
:tabm +i
:tabm -i
มันเป็นคุณสมบัติที่ค่อนข้างใหม่ ดังนั้นถ้ามันไม่ทำงานลองอัปเดตเสียงเรียกเข้าของคุณ
:tabm
ยอมรับข้อโต้แย้งที่เกี่ยวข้องในกลุ่ม 7.3
คุณหมายถึงการย้ายแท็บปัจจุบันหรือไม่ งานนี้ใช้ 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 ของฉัน ฉันไม่ได้เป็นcoder 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
เป็นจำนวน denoting ตำแหน่ง (เริ่มต้นจากศูนย์)
ฉันคิดว่าทางออกที่ดีกว่าคือการย้ายแท็บไปทางซ้ายหรือขวาไปยังตำแหน่งปัจจุบันแทนที่จะหาค่าตัวเลขของตำแหน่งใหม่ที่คุณต้องการ
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
ด้วยปุ่มกดด้านบนคุณจะสามารถย้ายแท็บปัจจุบันได้:
นอกเหนือจากคำแนะนำที่ดีในคำตอบอื่น ๆ คุณยังสามารถลากแท็บด้วยเมาส์เพื่อย้ายได้หากคุณเปิดใช้งานการรองรับเมาส์
นี่เป็นค่าเริ่มต้นใน MacVim และการใช้งาน GUI vim อื่น ๆ ไม่ว่าจะเป็นการใช้แท็บวิดเจ็ต GUI หรือแท็บสไตล์เทอร์มินัลในโหมด GUI
มันยังทำงานในโหมด tty บริสุทธิ์ Vim หากคุณมีset mouse=a
และมีเทอร์มินัลที่เหมาะสม (xterm และอีมูเลเตอร์ส่วนใหญ่ของมันเช่น gnome-terminal, Terminal.app, iTerm2 และ PuTTY / KiTTY เพื่อตั้งชื่อมุมมอง) โปรดทราบว่าการคลิกเมาส์ที่อยู่นอกเหนือจากคอลัมน์ 222 นั้นจำเป็นต้องใช้set ttymouse=sgr
เช่นกัน เห็นในเสียงทำไมเมาส์ของฉันไม่ทำงานเกินคอลัมน์ที่ 220 สำหรับพื้นหลังในนั้น
ฉันได้เขียนปลั๊กอินที่เรียกว่าvim-tabberที่มีฟังก์ชั่นเพิ่มเติมบางอย่างสำหรับการสลับแท็บไปรอบ ๆ ขยับพวกมันและเพิ่มความสามารถของคำสั่งการจัดการแท็บในตัว แม้ว่าคุณเลือกที่จะไม่ใช้ปลั๊กอิน แต่ก็มีข้อมูลการใช้งานแท็บทั่วไปใน README
ด้วยเหตุผลบางอย่างคำตอบฟังก์ชั่นหยุดทำงานสำหรับฉัน ฉันสงสัยว่ามีความขัดแย้งกับกลุ่ม-ctrlspace โดยไม่คำนึงถึงคณิตศาสตร์ในคำตอบฟังก์ชันนั้นไม่จำเป็นเนื่องจาก 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>
-tabm
and +tabm
in 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
ใช้คำตอบของ Pablo
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>
มันจัดการกรณีห่อ