Vim 切換至最後選取的 tab
2016-08-06: 新版的 Vim 已支援 TabClosed 事件,更正確/簡單的實作見 Vim 7.4.2077 新增 TabClosed 事件。
網路上有看到在 TabLeave 時,記錄最後 tab 編號的方法;缺點是 tab 關閉時,次序就亂了。
可能的困難是沒有 TabClose 事件,既有的 TabLeave 和 TabEnter 要判斷 tab 關閉又有點麻煩。例如開了 4 個 tab,關閉 tab 3 時,會進入 TabLeave,再 TabEnter 到 tab 4,這時 tabpagenr()
還是 4 —— 也就是會先進旁邊的 tab,TabEnter 事件後 tab 總數才會減少,而不是先關閉 tab 再移動。
雖然沒想出不同角度的解法,但以下 function 也算達到目的:
function LastTab(act) let lt = g:lasttab let tabClosed = tabpagenr('$') < lt.knownLength ? 1 : 0 if a:act ==# 'TabLeave' if ! tabClosed let lt.prevLeave = lt.leave elseif lt.prevLeave > tabpagenr() let lt.prevLeave -= 1 endif let lt.leave = tabpagenr() elseif a:act ==# 'switch' if tabClosed let lastTab = lt.prevLeave > tabpagenr() ? lt.prevLeave -1 : lt.prevLeave else let lastTab = lt.leave endif if lastTab == tabpagenr() echo 'Already on last tab.' else exe "tabn " . lastTab endif endif let lt.knownLength = tabpagenr('$') endfunction if ! exists('g:lasttab') let g:lasttab = {'leave':1, 'prevLeave':1, 'knownLength':1} endif au TabLeave * :call LastTab('TabLeave') au TabEnter * :call LastTab('TabEnter') nnoremap <LocalLeader>t :call LastTab('switch')<CR> inoremap <LocalLeader>t <C-\><C-N>:call LastTab('switch')<CR>
這段放到 .vimrc,之後按 <LocalLeader>t 就能切換至最後選取的分頁了。
不過剛進入 Vim 時,第一次切換會跳到第一個 tab。
有 0 個意見
☂