当我在 vi/vim(7.2) 中打开新选项卡时,如果打开的文件位于不同的路径中,选项卡标题会显示完整路径并占用屏幕空间,因此其他选项卡不可见。这意味着我无法使用鼠标单击我想要的选项卡,但必须使用 : & 键盘命令在选项卡之间移动。
有什么办法可以将选项卡标题限制为最大“大小/长度”,所以我只能看到远程相对路径中文件的最后 12 个字符?
你可以通过设置 'guitablabel' 很好地为 gvim 做这件事。
这是我的 .gvimrc 的摘录,它将默认值修改为仅显示文件名的最多 12 个字符,但保留修改后的缓冲区的“+”。工具提示未修改,因此您可以从中获取完整路径,或者在命令模式下按 Ctrl-G。
如果版本 >= 700 "设置 showtabline 显示多个选项卡时 设置 showtabline=1 "设置标签标签最多显示 12 个字符 设置 guitablabel=%-0.12t%M 万一 " 不在 GUI 中显示工具栏(仅菜单) 设置 guioptions-=T " 不显示撕下菜单 设置 guioptions-=t
回答我自己的问题:
在阅读了上面的Chad Birch并在谷歌上搜索设置表格后,我发现了TabLineSet插件可以解决问题,以及一些脚本解释here
:help setting-tabline
似乎有相关信息,但我对vim脚本不够熟悉,无法帮助您获得所需的确切效果。希望其他人可以从这一点开始。
另见:
:help statusline
有关打印各种信息的一些信息,这应该很有用。
我发现以下博客文章是最简洁的。
该链接提供了以下功能,应将其放置在您的.gvimrc
文件中。
function! GuiTabLabel()
" add the tab number
let label = '['.tabpagenr()
" modified since the last save?
let buflist = tabpagebuflist(v:lnum)
for bufnr in buflist
if getbufvar(bufnr, '&modified')
let label .= '*'
break
endif
endfor
" count number of open windows in the tab
let wincount = tabpagewinnr(v:lnum, '$')
if wincount > 1
let label .= ', '.wincount
endif
let label .= '] '
" add the file name without path information
let n = bufname(buflist[tabpagewinnr(v:lnum) - 1])
let label .= fnamemodify(n, ':t')
return label
endfunction
set guitablabel=%{GuiTabLabel()}
根据总标签标签长度动态调整标签标签长度的示例。(这适用于控制台版本的 vim)。把它放在你的 .vimrc 的末尾
if exists( '+showtabline' )
function! MyTabLine()
let s = ''
let wn = ''
let t = tabpagenr()
let i = 1
let cnt = 0
let totalLen = 0
while i <= tabpagenr( '$' )
let winnr = tabpagewinnr( i )
let buflist = tabpagebuflist( i )
let bufnr = buflist[winnr - 1]
let file = bufname( bufnr )
let buftype = getbufvar( bufnr , 'buftype' )
if buftype == 'nofile'
if file =~ '\/.'
let file = substitute( file , '.*\/\ze.' , '' , '' )
endif
else
let file = fnamemodify( file , ':p:t' )
endif
"<Number><Space><file><Space>
let totalLen = totalLen + 3 + len(file)
let i = i + 1
endwhile
let i = 1
while i <= tabpagenr( '$' )
let buflist = tabpagebuflist( i )
let winnr = tabpagewinnr( i )
let s .= '%' . i . 'T'
let s .= ( i == t ? '%1*' : '%2*' )
let wn = tabpagewinnr( i ,'$' )
let s .= '%#TabNum#'
let s .= i
"let s .= '%*'
let s .= ( i == t ? '%#TabLineSel#' : '%#TabLine#' )
let bufnr = buflist[winnr - 1]
let file = bufname( bufnr )
let buftype = getbufvar( bufnr , 'buftype' )
if buftype == 'nofile'
if file =~ '\/.'
let file = substitute( file , '.*\/\ze.' , '' , '' )
endif
else
let file = fnamemodify( file , ':p:t' )
endif
"echo totalLen . "/" . &columns . ", file=" . file
if totalLen > &columns && len(file) > 16
let file = strpart( file, 0, 6 ) . "~" . strpart( file, len(file)-10 )
endif
if file == ''
let file = '[No Name]'
endif
let s .= ' ' . file . ' '
let i = i + 1
endwhile
let s .= '%T%#TabLineFill#%='
let s .= ( tabpagenr('$') > 1 ? '%999XX' : 'X' )
return s
endfunction
set stal=2
set tabline=%!MyTabLine()
highlight link TabNum Special
endif