我希望在VIM中具有以下功能(特别是GVIM)。我认为Sublime Text有类似的东西:
示例:
当有以下文件的标签时:
选项卡名称将是:
justAfile.txt | files\myfile.txt | backup\myfile.txt
这是否适用于一些聪明的配置?
答案 0 :(得分:5)
在GVIM中,您可以使用'guitablabel'
选项自定义标签标签。
在终端Vim;没有'guitablabel'
等价物;一个人必须渲染整个'tabline'
。幸运的是,Vim帮助有一个示例,它将标签渲染委托给一个单独的函数,因此重新使用自定义函数非常容易。
上述选项的帮助页面链接到示例;您可能必须使用fnamemodify()
将所有缓冲区的路径规范化为完整的绝对路径,找到公共基本目录,然后将其从路径中删除。
另一方面,如果您可以:cd
到基本目录,那么您将获得非常开箱即用的那种标签标签。
答案 1 :(得分:1)
Ingo建议你可以使用guitablabel
。在我的安装中,它仅配置为显示文件名(:echo &guitablabel
报告%M%t
)。要将其设置为显示相对路径,请执行:set guitablabel=%M%f
。与Ingo说的一样,使用:cd DIRECTORY
设置主目录,使用:pwd
查看当前设置的位置。
有关(多个)更多格式选项,请参阅:help statusline
。
答案 2 :(得分:0)
这是我的解决方案,使选项卡名称成为目录---通常是选项卡要代表的项目的良好代理。如果只有一个缓冲区,则可以修改此解决方案以显示文件名(修改如下所示)。
此解决方案从Jerome's中汲取了一点点。我没有做任何复杂的事情,所以我的时间要短5倍。
此外,此解决方案还可以将制表符编号放在名称旁边,使其易于弹跳,这意味着制表符将如下所示:1:log 2:doc 3:vimfiles
和2gt
将移至第二个制表符。
set tabline=%!TabLine()
function! TabLine()
let line = ''
for i in range(tabpagenr('$'))
let line .= (i+1 == tabpagenr()) ? '%#TabLineSel#' : '%#TabLine#'
let line .= '%' . (i + 1) . 'T'
let line .= TabLabel(i + 1) . ' '
endfor
let line .= '%#TabLineFill#%T'
return line
endfunction
function! TabLabel(n)
" Return list of buffer numbers for each window pane open in tab.
let panelist = tabpagebuflist(a:n)
" See :help setting-tabline then search MyTabLabel if you want to
" use use the active window. I use the topmost pane, which let's
" me rename the tab just by putting a window from a different
" directory in the first position.
let filepath = bufname(panelist[0])
let dirname = fnamemodify(filepath, ':p:h:t')
return a:n . ':' . dirname
endfunction
修改为在只有一个缓冲区可见的情况下显示文件名:
function! TabLabel(n)
" Return list of buffer numbers for each window pane open in tab.
let panelist = tabpagebuflist(a:n)
" See :help setting-tabline then search MyTabLabel if you want to
" use use the active window. I use the topmost pane, which let's
" me rename the tab just by putting a window from a different
" directory in the first position.
let filepath = bufname(panelist[0])
let dirname = fnamemodify(filepath, ':p:h:t')
let filename = fnamemodify(filepath, ':t')
let tabname = len(panelist) > 1 ? dirname : filename
return a:n . ':' . tabname
endfunction