关闭制表符后,Vim自动显示左制表符

kd3sttzy  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(240)

在Vim中关闭一个标签页后,如何使左边的标签页自动显示出来?
关闭标签页时的默认设置似乎是显示右标签页,这很烦人,因为新标签页在当前标签页的右边打开。所以打开一个新标签页和关闭它会让你处于不同的标签页。

qgelzfjb

qgelzfjb1#

已建议对add a 'tabcloseleft' option进行修补;它将被集成到Vim中(在将来的某个时候,一旦Bram有时间处理它)。

lztngnrs

lztngnrs2#

有一个想法:虽然没有TabClose事件,但有TabEnter事件可用于实现您所需目的:如果在其中一个事件上,选项卡的数量小于先前记录的数量,则显然是由于关闭的选项卡而触发的:

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

jjhzyzn03#

很棒的问题,纠结了一段时间,这里是我的解决方案。
将以下内容添加到.vimrc文件中。

" 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

kxeu7u2r

kxeu7u2r4#

我对此表示怀疑;我看不出有任何方法。甚至没有一个自动命令事件可以让你锁定(例如,TabClose可能是你想要的,但它并不存在)。
最接近的方法可能是使用自己的命令或Map,在关闭选项卡的同时执行正常模式gT。(您可能会对函数进行一些花哨的操作,并检测窗口的状态,从而确定是否希望执行gT。这需要更多的思考和研究。)
当然,你也可以调查使用另一个解决方案的选项卡;以下是一些例子:

  • 使用分割视窗
  • 使用替代档案(请参阅CTRL-6
  • 使用标记堆栈在文件之间移动(CTRL-]用于移动,CTRL-T用于返回)
tez616oj

tez616oj5#

这看起来很有用:
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会做我想做的事...

相关问题