Ограничить соответствие в vim определенными типами файлов? - PullRequest
8 голосов
/ 09 ноября 2009

В моем .vimrc есть следующее, чтобы выделить строки длиннее 80 символов:

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

Это работает довольно хорошо. Однако проблема в том, что я бы предпочел, чтобы он работал только с определенными типами файлов. По сути, любой язык программирования должен быть выделен, а такие вещи, как html, xml и txt файлы не должны быть. Я уверен, что смог бы сделать это легко с помощью autocmd, но я не уверен, что это лучший способ для достижения этой цели. У кого-нибудь есть мнения?

Ответы [ 2 ]

7 голосов
/ 09 ноября 2009

Проблема использования соответствия для такой задачи заключается в том, что она является локальной для активного окна, а не для редактируемого буфера. Я бы попробовал что-то вроде следующего:

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

По сути, вы хотите запускать каждый раз, когда изменяется буфер в текущем окне. На этом этапе вы оцениваете, какой тип файла имеет буфер, и настраиваете, должно ли совпадение быть активным или нет.

Если вы также хотите поддержать редактирование безымянного буфера и затем установить его тип файла (либо путем сохранения, либо вручную установив & ft), FileType даже следует добавить в список.

6 голосов
/ 09 ноября 2009

Звучит так, будто вы хотите что-то вроде:

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

Кажется, все равно работает для меня: -)

...