是否可以在vim中更改每种文件类型的标签头颜色?

时间:2018-08-03 02:00:47

标签: vim

如果我打开.js,.html,.rb和其他文件类型,是否可以更改每个文件类型的标签颜色? Tab表示vim的选项卡不像空格。

2 个答案:

答案 0 :(得分:0)

为此,您将必须编写自己的:help 'tabline'(另请参阅:help 'statusline')及其所有支持代码。

具有不同的颜色是容易的部分:

:set tabline=%#Error#\ foo.js\ %*%#DiffAdd#\ bar.rb\ %*%#Search#\ baz.scss\ %*

enter image description here

该代码将确定各种事件中正确的tabline值,而这些事件根本不会是很简单的

答案 1 :(得分:0)

使用格式%#String#将使用字符串hightlight进行着色:
-set tabline=%#String#\ toto

放入 vimrc 的脚本:

function! TabTest()
  let res = ''

  for i in range(tabpagenr('$'))
    let i += 1
    " Get open buffer
    let i_window = tabpagewinnr(i)
      let l_buffer = tabpagebuflist(i)
    let i_buffer = l_buffer[i_window - 1]

    " Get type
    let s_type = getbufvar(i_buffer, '&filetype')

    " Set color according to filetype
    let s_color = ''
    if i == tabpagenr()
      let res .= '%#TabLine#'
    elseif 'javascript' == s_type
      let res .= '%#String#'
    elseif 'html' == s_type
      let res .= '%#Comment#'
    else 
      let res .= '%#Normal#'
    endif

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

    " Set label text
      let s_buffer = bufname(i_buffer)
    try
      let s_file = split(s_buffer, '/')[-1]
    catch
      let s_file = '[No Name]'
    endtry
      let res .= ' ' . s_file
  endfor

  return res
endfunction

set tabline=%!TabTest()

根据文件类型要求突出显示颜色时,必须获取缓冲区的文件类型:
-let s_type = getbufvar(i_buffer, '&filetype')

为此,必须在选项卡中获取activer缓冲区的缓冲区号:
-let i_window = tabpagewinnr(i)
-let l_buffer = tabpagebuflist(i)
-let i_buffer = l_buffer[i_window - 1]

然后,您必须明智地用if区分添加到文件类型。因此,您绝对要在函数中隐藏所有这些内容:
set tabline=%!TabTest()

更多:
h tabline
h statusline