Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vi/vim-如何将选项卡标签/标题长度设置为固定大小(以字符为单位)_Vim_Tabs_Vi - Fatal编程技术网

vi/vim-如何将选项卡标签/标题长度设置为固定大小(以字符为单位)

vi/vim-如何将选项卡标签/标题长度设置为固定大小(以字符为单位),vim,tabs,vi,Vim,Tabs,Vi,当我在vi/vim(7.2)中打开新的选项卡时,如果打开的文件位于不同的路径中,选项卡标题将显示完整的路径,并占据屏幕空间,因此其他选项卡不可见。这意味着我无法使用鼠标单击所需的选项卡,但必须使用:&键盘命令在选项卡之间移动 有没有办法将标签标题限制为最大“大小/长度”,这样我就只能看到文件的最后12个字符在一个相对较远的路径中 :help setting-tabline 似乎有相关信息,但我对vim脚本不够熟悉,无法帮助您获得想要的确切效果。希望其他人能从这一点上有所收获 另见: :help

当我在vi/vim(7.2)中打开新的选项卡时,如果打开的文件位于不同的路径中,选项卡标题将显示完整的路径,并占据屏幕空间,因此其他选项卡不可见。这意味着我无法使用鼠标单击所需的选项卡,但必须使用:&键盘命令在选项卡之间移动

有没有办法将标签标题限制为最大“大小/长度”,这样我就只能看到文件的最后12个字符在一个相对较远的路径中

:help setting-tabline
似乎有相关信息,但我对vim脚本不够熟悉,无法帮助您获得想要的确切效果。希望其他人能从这一点上有所收获

另见:

:help statusline

关于打印各种信息的一些信息,这应该很有用。

回答我自己的问题:

在阅读上面的内容并通过谷歌搜索设置tabline之后,我找到了实现这一功能的插件,我发现下面的一些脚本解释是最简洁的

该链接提供了以下功能,这些功能应放在
.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()}

通过设置“guitablabel”,可以很好地为gvim实现这一点

这里是my.gvimrc的一个摘录,它修改了默认值,只显示文件名的12个字符,但保留了修改后的缓冲区的“+”。工具提示保持不变,因此您可以从中获取完整路径,或者在命令模式下按Ctrl-G键

if version >= 700 "set showtabline to show when more than one tab set showtabline=1 "set tab labels to show at most 12 characters set guitablabel=%-0.12t%M endif " don't show the toolbar in the GUI (only the menu) set guioptions-=T " don't show tear-off menus set guioptions-=t 如果版本>=700 “将showtabline设置为在多个选项卡出现时显示 设置可显示行=1 “将选项卡标签设置为最多显示12个字符 设置吉他标签=%-0.12t%M 恩迪夫 “不在GUI中显示工具栏(仅显示菜单) 设置guioptions-=T “不要展示撕下的菜单 设置guioptions-=t
一个基于选项卡标签总长度动态调整选项卡标签长度的示例。(这适用于控制台版本中的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
如果存在(“+显示行”)
功能!MyTabLine()
让我们=“”
设wn=''
设t=tabpagenr()
设i=1
设cnt=0
设n=0

我可以给你举几个例子。文档不足。请安装TabLineSert插件,并在.vimrc文件中设置所需的变量,如下所示:“let g g:TabLineSet_max_tab_len=20”查看TabLineSet_变量的完整列表,查看TabLineSet.vim