web-dev-qa-db-ja.com

vimのタブバーの色をカスタマイズする

Vimのタブバーの色をどのように変更しますか?

私は使ってみました

:hi TabLineFill ctermbg=N

これにより、タブバーの背景の色が「N」が示す色に変わりますが、これがグーグルから収集したすべてです。 :help cterm-colors、しかし私はそれからあまり理解を得ることができませんでした。

このハイライト機能を使用して、アクティブなタブの前景と背景、および非アクティブなタブの前景と背景の色を変更できますか?もしそうなら、私はこれをどうやってやりますか?

33
Pádraig

たとえば、次のことができます。

:hi TabLineFill ctermfg=LightGreen ctermbg=DarkGreen
:hi TabLine ctermfg=Blue ctermbg=Yellow
:hi TabLineSel ctermfg=Red ctermbg=Yellow

この行は、タブごとのウィンドウカウンターに影響します。

:hi Title ctermfg=LightBlue ctermbg=Magenta

それぞれのアイテムの変化を強調するために選ばれた派手な色。

$VIMRUNTIME/colors/*.vimを見ると、 highlighting で遊ぶときに本当に役立ちます。

これらはコンソールで実行されているVimの色を変更することに注意してください。 GVimの色を変更する場合は、guibgguifget ceteraを使用する必要があります。例えば:

:hi TabLineFill guifg=LightGreen guibg=DarkGreen ctermfg=LightGreen ctermbg=DarkGreen
49
Johnsyweb

はい、そうです。

タブ行には、好みに応じてカスタマイズできる3つの項目があります:TabLineTabLineSelおよびTabLineFill

TabLineSel-現在の(いわば)アクティブなタブラベルです。
TabLine-現在アクティブではないラベルです。
TabLineFill-ラベルがない(背景)タブラインの残りの部分です。

3つすべてを通常の方法で変更します。

10
Rook

'tabline'オプションは、タブページラベルのある行がどのように見えるかを指定します。 GUIタブ行がない場合にのみ使用されます。

'showtabline'オプションを使用して、タブページラベルが付いた行を表示するタイミングを指定できます。タブページが複数ある場合、または常に表示することはできません。

タブページ行の強調表示は、TabLine TabLineSelおよびTabLineFillグループで設定されます。 | hl-TabLine | | hl-TabLineSel | | hl-TabLineFill |

ウィンドウが変更されているタブページには、「+」が表示されます。タブページのウィンドウ数も表示されます。したがって、「3+」は3つのウィンドウを意味し、そのうちの1つには変更されたバッファがあります。

「タブライン」オプションを使用すると、タブページラベルの優先方法を定義できます。これは簡単ではないので、ここで例を示します。

基本については、 'statusline'オプションを参照してください。同じ項目を「タブライン」オプションで使用できます。さらに、| tabpagebuflist()|、| tabpagenr()|および| tabpagewinnr()|関数は便利です。

タブラベルの数は異なるため、オプション全体に式を使用する必要があります。次のようなもの:>:set tabline =%!MyTabLine()

次に、すべてのタブページラベルを一覧表示するMyTabLine()関数を定義します。便利な方法は、それを2つの部分に分割することです。最初にすべてのタブページに移動し、それらのラベルを定義します。次に、各タブページのラベルを取得します。 >

function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    " select the highlighting
    if i + 1 == tabpagenr()
      let s .= '%#TabLineSel#'
    else
      let s .= '%#TabLine#'
    endif

    " set the tab page number (for mouse clicks)
    let s .= '%' . (i + 1) . 'T'

    " the label is made by MyTabLabel()
    let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
  endfor

  " after the last tab fill with TabLineFill and reset tab page nr
  let s .= '%#TabLineFill#%T'

  " right-align the label to close the current tab page
  if tabpagenr('$') > 1
    let s .= '%=%#TabLine#%999Xclose'
  endif

  return s
endfunction

MyTabLabel()関数が各タブページで呼び出され、ラベルが取得されます。 >

function MyTabLabel(n)
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  return bufname(buflist[winnr - 1])
endfunction

これは、デフォルトに似たタブページ行になる単純な例にすぎませんが、変更されたバッファーに+を追加したり、名前を切り捨てたりしていません。十分なスペースがない場合は、賢い方法でラベルの幅を小さくする必要があります。使用可能なスペースについては、「列」オプションを確認してください。

1
KJlmfe