关闭选项卡后,vim会自动显示左侧选项卡

时间:2012-12-29 06:02:08

标签: vim

关闭vim中的选项卡后,如何进行选项以使左侧的选项卡自动显示?

关闭选项卡时的默认设置似乎显示正确的选项卡,这很烦人,因为当前选项卡右侧的新选项卡已打开。因此,打开一个新选项卡并关闭它会使您处于另一个选项卡上。

5 个答案:

答案 0 :(得分:3)

已向add a 'tabcloseleft' option提出补丁;它将被整合到Vim中(在未来的某个时间,一旦Bram有时间处理它)。

答案 1 :(得分:2)

有一个想法:虽然没有TabClose事件,但有TabEnter事件可用于实现您想要的事情:如果在其中一个事件中,选项卡的数量少于先前记录的数量数字显然是由于关闭标签而被触发的:

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

答案 2 :(得分:0)

我怀疑它;我无法看到任何方式。甚至没有你可以锁定的自动命令事件(例如TabClose将是你想要的,但它不存在)。

您最接近的可能是拥有自己的命令或映射,并且关闭选项卡将执行正常模式gT。 (你或许可以在一个函数中找到它,并检测窗口的状态,从而确定你是否希望gT。这需要更多的思考和调查。)

当然,您也可以使用其他解决方案进行调查;这里有几个:

  • 使用拆分窗口
  • 使用备用文件(请参阅CTRL-6
  • 使用标记堆栈在文件之间移动(CTRL-]移动,CTRL-T返回)

答案 3 :(得分: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会做我想要的......

答案 4 :(得分: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>
{p> TabCloseLeft函数:https://github.com/convissor/vim-settings/blob/master/.vimrc