Limiting a match in vim to certain filetypes?

前端 未结 2 926
孤城傲影
孤城傲影 2021-01-17 22:20

I have the following in my .vimrc to highlight lines longer than 80 chars:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\\%         


        
相关标签:
2条回答
  • 2021-01-17 22:25

    Sounds like you might want something like:

    autocmd FileType html,xml highlight OverLength ctermbg=red ctermfg=white guibg=#592929
    autocmd FileType html,xml match OverLength /\%81v.*/
    

    Seems to work for me anyway :-)

    0 讨论(0)
  • 2021-01-17 22:29

    The issue with using match for a task like this is that it is local to the active window, not to the buffer being edited. I'd try something along the following lines:

    highlight OverLength ctermbg=red ctermfg=white guibg=#592929
    fun! UpdateMatch()
        if &ft !~ '^\%(html\|xml\)$'
            match OverLength /\%81v.*/
        else
            match NONE
        endif
    endfun
    autocmd BufEnter,BufWinEnter * call UpdateMatch()
    

    Basically, you want to trigger whenever the buffer in the current window changes. At that point, you evaluate what filetype the buffer has and adjust whether the match should be active or not.

    If you also want to support editing an unnamed buffer and then setting its filetype (either via saving or manually setting &ft), the FileType even should be added to the list.

    0 讨论(0)
提交回复
热议问题