2012-12-29 129 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