2012-12-29 125 views
5

在關閉vim中的標籤後,我該如何使左邊的標籤是自動顯示的標籤?vim在關閉標籤後自動顯示左邊的標籤

關閉選項卡時的默認設置似乎顯示了正確的選項卡,這很麻煩,因爲當前選項卡右側的新選項卡打開。因此,打開一個新選項卡並關閉它會將您留在不同的選項卡上。

回答

1

我懷疑它;我無法看到任何方式。甚至沒有可以鎖定的自動命令事件(例如​​將會是你想要的,但它不存在)。

最接近你會得到的可能是你自己的命令或映射,以及關閉標籤,執行正常模式gT。 (你可能會喜歡一個功能,並檢測窗口的狀態,因此是否希望gT或需要更多的思考和調查。)

你當然也可以調查使用另一個解決方案標籤;這裏有幾個:

  • 使用分割窗口
  • 使用備用文件(見CTRL-6
  • 使用標籤棧的文件之間移動(CTRL-]移動,CTRL-T找回)
3

補丁已提出add a 'tabcloseleft' option;它被列入待辦事項列表(Vim)(將來有一段時間,一旦Bram有時間來處理它)。

+0

沒錯這就是我的補丁,添加在幾個月前。希望它能很快進入主線。 – willurd

2

有一個想法:雖然沒有​​事件,但有TabEnter事件可以用來實現你想要的事件:如果在其中一個事件中選項卡的數量少於之前記錄的數量,那麼顯然它被觸發到期要關閉的標籤頁:

let s:prevtabnum=tabpagenr('$') 
augroup TabClosed 
    autocmd! TabEnter * :if tabpagenr('$')<s:prevtabnum && tabpagenr()>1 
       \  | tabprevious 
       \  |endif 
       \  |let s:prevtabnum=tabpagenr('$') 
augroup END 
+0

@CiroSantilli你應該在這裏閱讀所有答案。這個鏈接已經在一年前由OP發佈在他自己的回答中。 – ZyX

0

這看起來有用:

http://vim.wikia.com/wiki/Have_focus_on_left_tab_after_tabclose

我想我會修改它稍微要做到這一點:

function! CloseSomething() 
    if winnr("$") == 1 && tabpagenr("$") > 1 && tabpagenr() > 1 && tabpagenr() < tabpagenr("$") 
     q | tabprev 
    else 
     q 
    endif 
endfunction 
cnoremap q<CR> :call CloseSomething()<CR> 

所以現在:q會做我想做的......

+0

我喜歡這個函數和映射的概念,但它有缺點。提出一些也可以處理'quit','q!','wq'的代碼會很好。即使更甜更會處理'x','ZZ'等。我嘗試了很多變化,無法找到工作。 –

0

大問題,掙扎了一段時間,這裏是我的解決方案。

將以下內容添加到您的.vimrc文件中。請注意,我已經重新映射爲命令:q:Q

" declare function for moving left when closing a tab. 
function! TabCloseLeft(cmd) 
    if winnr('$') == 1 && tabpagenr('$') > 1 && tabpagenr() > 1 && tabpagenr() < tabpagenr('$') 
     exec a:cmd | tabprevious 
    else 
     exec a:cmd 
    endif 
endfunction 

" define :Q command 
command Q call TabCloseLeft('q!') 

" override default quit command 
cabbrev q <c-r>=(getcmdtype()==':' && getcmdpos()==1 ? 'Q' : 'q')<CR> 

信貸TabCloseLeft功能:https://github.com/convissor/vim-settings/blob/master/.vimrc