如何让Vim选项卡不显示完整文件路径,只显示相同名称的文件打开时显示相关文件夹?

时间:2016-02-17 05:08:02

标签: vim vim-plugin

问题

我了解a variant of this question可能已得到解答。

我尝试了:set guitablabel=%t,但有两个问题:

  1. 它在终端的Vim中不起作用(因为gui设置仅适用于GVim)。我专门使用终端Vim,因此给出的答案并不适用。
  2. 不同目录中具有相同名称的文件不会显示在相关文件夹中以供区分。
  3. 现状

    为了更好地理解我的问题,请说我有一个项目文件夹,awesome-project具有以下结构:

    awesome-project
        AAA/
            file1.txt
            file2.txt
            CCC/
                special.txt
        BBB/
            file2.txt
            file3.txt
            DDD/
                special.txt
    

    在我的终端中向我cd项目说{i} vim。然后我继续在单独的标签中打开所有文件。

    目前,我的vim设置为显示以下标签(|是分隔符 - 用你的想象力!):

    AAA/file1.txt | AAA/file1.txt | AAA/CCC/special.txt | BBB/file2.txt | BBB/file3.txt | BBB/DDD/special.txt

    我想要什么

    我希望标签显示为:

    file1.txt | AAA/file2.txt | CCC/special.txt | BBB/file2.txt | file3.txt | DDD/special.txt

    或Sublime Text的作用:

    file1.txt | file2.txt --- AAA | special.txt --- AAA/CCC | file2.txt --- BBB | file3.txt | special.txt --- BBB/DDD

    基本上,鉴于当前选项卡具有唯一的文件名,所有选项卡都应显示其文件名。否则,提供要在选项卡中显示的第一个不同的相对文件夹,以便我可以判断哪些文件是文件。

    这是许多其他文本编辑器(Sublime Text,Atom)中的一个功能,我真的想保留它,因为相对路径文件名太长了,不适合我自己。

    任何帮助将不胜感激,无论是:

    • 修复问题的简单命令(yay!)
    • 一个可用的插件
    • 有关如何在.vimrc
    • 中手动配置此提示的提示

2 个答案:

答案 0 :(得分:3)

您 - 毫不奇怪 - 误解和滥用标签页。

就像Atom或Sublime Text一样,Vim是一个基于文档的程序,但与其他程序不同,它不使用“tab”隐喻作为这些文档的代理。相反,标签页是 workspaces ,旨在包含一个或多个窗口,它们本身是用于显示缓冲区的视口。缓冲区是Vim相当于其他编辑器中的文档,幸运的是没有内置的方法来获得“永远在线”的缓冲区列表。 “谢天谢地”,因为这样的功能与其他编辑器一样无用。

我没有使用标签页作为文档代理 - 无论如何都无法工作 - 我建议你习惯Vim基于缓冲区的工作流程。

Here is a bit of reading让你从良好的脚步开始。

答案 1 :(得分:0)

我也在尝试做同样的事情。如果您对编写自己的标签行感兴趣,则需要阅读标签行和设置标签行。但是,如果您只想要一个简单的文件,则可以将其复制到vimrc:

"tabline                                                                                                                                                                                                                                                                
if exists("+showtabline")
     function MyTabLine()
         let s = ''
         let t = tabpagenr()
         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 s .= ' '
             let s .= '|'. i . ')'
             let s .= ' %*'
             let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
             let file = bufname(buflist[winnr - 1])
             let file = fnamemodify(file, ':p:t')
             if file == ''
                 let file = '[No Name]'
             endif
             let s .= file
             let s .= ' ' 
             let i = i + 1
         endwhile
         let s .= '%T%#TabLineFill#%='
         let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
         return s
     endfunction
     set stal=2
     set tabline=%!MyTabLine()
endif