vi / vim - как установить фиксированный размер метки/заголовка вкладки в символах

Когда я открываю новые вкладки в vi/vim(7.2), если открытые файлы находятся по разным путям, в заголовке вкладки отображается полный путь и занимает все пространство экрана, поэтому другие вкладки не видны. Это означает, что я не могу использовать мышь, чтобы щелкнуть нужную вкладку, но должен прибегать к командам : & для перемещения между вкладками.

Есть ли способ ограничить заголовки вкладок максимальным «размером / длиной», чтобы я мог видеть только последние 12 символов файла в удаленном относительном пути?


person molicule    schedule 28.01.2009    source источник


Ответы (5)


Вы можете сделать это довольно хорошо для gvim с настройкой 'guitablabel'.

Вот выдержка из моего .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
person werkshy    schedule 21.01.2010

В ответ на мой собственный вопрос:

После прочтения Chad Birch выше и поиска в Google settings-tabline я нашел TabLineSet плагин, который помогает, и некоторые пояснения к скрипту здесь

person molicule    schedule 28.01.2009
comment
Не могли бы вы добавить несколько примеров. Документации недостаточно. - person cmcginty; 11.07.2009
comment
установите плагин TabLineSert и в файле .vimrc установите нужные переменные следующим образом: пусть g:TabLineSet_max_tab_len = 20 полный список переменных TabLineSet_ смотрите в TabLineSet.vim - person molicule; 11.07.2009

:help setting-tabline

Кажется, у меня есть соответствующая информация, но я недостаточно знаком со сценариями vim, чтобы помочь вам получить именно тот эффект, который вы хотите. Надеюсь, кто-то еще может поднять с этого момента.

Также см:

:help statusline

Для получения некоторой информации о печати различной информации, это должно быть полезно.

person Chad Birch    schedule 28.01.2009

Я обнаружил, что следующая запись в блоге была самый лаконичный из всех.

Ссылка предоставляет следующую функцию, которая должна быть помещена в ваш файл .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()}
person cmcginty    schedule 10.07.2009

Пример динамической настройки длины метки вкладки на основе общей длины метки вкладки. (это для 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
person winest    schedule 06.04.2020