簡體   English   中英

vi / vim - 如何將標簽標簽/標題長度設置為固定的字符大小

[英]vi / vim - how to set the tab label/title length to a fixed size in chars

當我在 vi/vim(7.2) 中打開新選項卡時,如果打開的文件位於不同的路徑中,則選項卡標題會顯示完整路徑並占用屏幕空間,因此其他選項卡不可見。 這意味着我不能使用鼠標單擊我想要的選項卡,而必須求助於: & 鍵盤命令在選項卡之間移動。

有什么辦法可以將選項卡標題限制為最大“大小/長度”,這樣我只能看到遠距離相對路徑中文件的最后 12 個字符?

您可以通過設置 'guitablabel' 為 gvim 很好地做到這一點。

這是我的 .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

回答我自己的問題:

在閱讀了上面的Chad Birch並在谷歌上搜索了 setting-tabline 之后,我發現了TabLineSet插件可以解決這個問題,還有一些腳本解釋在這里

我發現以下博客文章是最簡潔的。

該鏈接提供了以下函數,該函數應放置在您的.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()}
:help setting-tabline

似乎有相關信息,但我對 vim 腳本編寫不夠熟悉,無法幫助您獲得所需的確切效果。 希望其他人可以從這一點上有所收獲。

另見:

:help statusline

有關打印各種信息的一些信息,這應該很有用。

根據標簽標簽總長度動態調整標簽標簽長度的示例。 (這適用於控制台版本中的 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

我寫了一個 tabline 插件, mintabline.vim ,它可以讓你配置選項卡名稱的最大長度。

就像把它放在你的 vimrc 中一樣簡單:

Plug 'sangdol/mintabline.vim'
let g:mintabline_tab_max_chars = 15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM