views:

81

answers:

2

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

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.*/

This works quite well. However, the problem is that I would prefer it if it only worked on certain file types. Basically, any programming language should be highlighted and things like html, xml, and txt files should not be. I'm pretty sure I could do this easily with an autocmd, but I'm not sure if that is the best way to accomplish that goal. Anybody have any opinions?

+2  A: 

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 :-)

Benj
Argh, actually that's not quite what you asked for is it. Hmm, wonder if it's possible to negate the FileType...
Benj
Yeah, like I said, I think doing it this way with the autocmds could work well enough, you just need to swap which files are here. Instead of html and xml, it should be c, c++,etc... So, if the FileType could be negated, then that would be even better.
Paul Wicks
Hmm, I don't think it is. Look like you'll have to actually list the filetypes you want this highlighting for.
Benj
+2  A: 

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.

jamessan