9

VIM (特に GVIM) に次の機能が欲しいです。Sublime Text には次のようなものがあると思います。

  1. 「通常の」場合、タブ名はファイルの名前だけにする必要がありますが...
  2. 同じ名前で別のディレクトリに開いているファイルが2つある場合、タブ名の親フォルダー名+ファイル名を表示したいと思います。

例:

次のファイルのタブがある場合:

  • c:\my\dir\with\files\justAfile.txt
  • c:\my\dir\with\files\myfile.txt
  • c:\my\dir\with\backup\myfile.txt

タブ名は次のようになります。

justAfile.txt | files\myfile.txt | backup\myfile.txt 

これは、巧妙な構成で実行できますか?

4

4 に答える 4

6

GVIM では、オプションを使用してタブ ラベルをカスタマイズでき'guitablabel'ます。

ターミナルVimで; 'guitablabel'同等のものはありません。全体をレンダリングする必要があります'tabline'。幸いなことに、Vim ヘルプには、ラベルのレンダリングを別の関数に委任する例があるため、カスタム関数を再利用するのは非常に簡単です。

上記のオプションのヘルプ ページには、例へのリンクがあります。おそらく、fnamemodify()すべてのバッファのパスを完全な絶対パスに正規化し、共通のベースディレクトリを見つけて、それをパスから削除するために使用する必要があります。

一方、:cdベース ディレクトリに移動しても問題ない場合は、そのようなタブ ラベルがすぐに使用できるようになります。

于 2013-04-29T11:35:36.060 に答える
1

Ingo が示唆するように、 を使用できますguitablabel。私のインストールでは、ファイル名(:echo &guitablabelreports %M%t)を表示するようにのみ構成されています。相対パスを表示するようにこれを設定するには、次のようにします:set guitablabel=%M%f。Ingo が言うように、使用:cd DIRECTORYしてホーム ディレクトリを設定し:pwd、現在設定されている場所を確認します。

:help statusline(多くの) より多くの書式設定オプションについては、 を参照してください。

于 2013-04-29T11:42:13.930 に答える
1

タブ名をディレクトリにする私のソリューションは次のとおりです。これは、通常、タブが表すプロジェクトの適切なプロキシです。このソリューションは、バッファが 1 つしかない場合にファイル名を表示するように変更できます (以下に変更を示します)。

このソリューションは、Jerome の. 私は彼らほど複雑なことをしていないので、私のものは 5 倍短いです。

また、このソリューションではタブ番号が名前の横に配置されるため、簡単に移動できます。つまり、タブは次のようになり、2 番目のタブに移動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

バッファが 1 つだけ表示されている場合にファイル名を表示するための変更:

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
于 2020-12-02T02:32:26.853 に答える