自定义vim标签栏的颜色

时间:2011-08-30 02:32:01

标签: vim colors tabs

如何修改vim标签栏的颜色?

我尝试过使用

:hi TabLineFill ctermbg=N

确实将标签栏背景的颜色更改为'N'表示的颜色,但这是我设法从谷歌搜索中收集的全部内容。我看了一下:help cterm-colors,但我没有从中得到更多的理解。

我是否可以使用此突出显示功能来更改活动选项卡的前景和背景的颜色,以及非活动选项卡的前景和背景?如果是这样,我将如何做到这一点?

4 个答案:

答案 0 :(得分:47)

您可以执行以下操作,例如:

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

此行影响每个标签的窗口计数器:

:hi Title ctermfg=LightBlue ctermbg=Magenta

选择Garish颜色以突出显示每个项目的变化。

我发现在highlighting玩游戏时,$VIMRUNTIME/colors/*.vim看起来真有帮助。

请注意,这些更改了在控制台中运行的Vim的颜色。如果您想更改GVim的颜色,则需要使用guibgguifg等等。例如:

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

答案 1 :(得分:10)

是的,你愿意。

标签行中有三个项目可根据您的喜好进行自定义: TabLine TabLineSel TabLineFill

TabLineSel - 是当前(也就是说)活动标签标签 TabLine - 是当前未激活的标签 TabLineFill - 是没有标签(背景)的tabline的剩余部分。

您可以通常的方式修改所有这三个。

答案 2 :(得分:1)

'tabline'选项指定标签页标签的行。 它仅在没有GUI标签行时使用。

您可以使用'showtabline'选项指定您希望该行的时间 标签页标签显示:从不,当有多个标签页或时 总是

使用TabLine组设置标签页行的突出显示 TabLineSel和TabLineFill。 | HL-TabLine | | HL-TabLineSel | | HL-TabLineFill分别指定|

对于具有修改窗口的标签页,将显示“+”。的数量 还会显示标签页中的窗口。因此,“3+”表示三个窗口和一个窗口 他们有一个修改过的缓冲区。

'tabline'选项允许您定义标签页的首选方式 标签。这并不容易,因此这里将给出一个例子。

有关基础知识,请参阅“statusline”选项。可以使用相同的项目 'tabline'选项。另外,| tabpagebuflist()|,| tabpagenr()|和 | tabpagewinnr()|功能很有用。

由于标签标签的数量会有所不同,因此您需要使用表达式 整个选择。像:>     :set tabline =%!MyTabLine()

然后定义MyTabLine()函数以列出所有标签页标签。一个 方便的方法是将它分成两部分:首先查看所有选项卡 页面并为它们定义标签。然后获取每个标签页的标签。 >

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

这只是一个简单的例子,导致标签页行 类似于默认值,但没有为修改后的缓冲区添加+或 截断名称。您需要减少a中标签的宽度 当没有足够的空间时,聪明的方式。检查“列”选项 可用空间。

答案 3 :(得分:0)

您可以使用 autocommand groups 将@Johnsyweb 的优秀答案中的更改永久化。将以下内容放入您的 ~/.vimrc

" Highlight the active tab.
augroup TabColors
  autocmd!
  autocmd ColorScheme *
        \ highlight TabLineFill
        \   ctermfg=Black
        \   ctermbg=NONE
  autocmd ColorScheme *
        \ highlight TabLine
        \   ctermfg=NONE
        \   ctermbg=NONE
  autocmd ColorScheme *
        \ highlight TabLineSel
        \   ctermfg=NONE
        \   ctermbg=DarkBlue
  autocmd ColorScheme *
        \ highlight Title
        \   ctermfg=NONE
        \   ctermbg=NONE
augroup END

您可以尝试将 colors 更改为您喜欢的任何内容。