Как переопределить подсветку синтаксиса по умолчанию в vim?
в VIM мне нужно выполнить простую задачу-выделить "(" и ")". Я могу сделать это легко, выдав две команды:
:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000
но если я добавлю те же команды (без ':', конечно )в пустой.vimrc и перезапуск VIM - " ("и ")" больше не выделяются .cpp-файлы. Кажется, что если я создаю / загружаю .cpp-файл, VIM загружает синтаксический файл для него, который переопределяет мои пользовательские основные моменты. Как настроить основные моменты в my .файл vimrc так это пройдет после стандартного синтаксиса определения или не будут затронуты стандартным синтаксическим определением?
4 ответов
есть четыре варианта (два из которых были предложены другим):
-
использовать
after
структура в vimfiles (~/.vim / after / синтаксис / cpp.vim)::help after-directory
-
используйте match для текущего окна:
:match really_unique_name "[()]"
-
используйте matchadd (), снова для текущего окна, но это позволяет удалить отдельные матчи, если вам позже нужно:
:call matchadd('really_unique_name', "[()]") " Or :let MyMatchID = matchadd('really_unique_name', "[()]") " and then if you want to switch it off :call matchdelete(MyMatchID)
установите Dr Chip Радужный.ВИМ плагин, чтобы получить подсветку скобки в разных цветах в зависимости от уровня отступа.
для этой ситуации я бы рекомендовал Вариант 1, поскольку похоже, что вы хотите сделать его частью общего синтаксиса. Если вы хотите использовать совпадения, и вы хотите, чтобы они были специфичными для буфера (а не для окна), вам понадобится что-то вроде:
function! CreateBracketMatcher()
call clearmatches()
call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()
для получения дополнительной информации см.:
:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter
вы также можете быть заинтересованы в моем ответе этот вопрос, который охватывает более общую подсветку оператора.
вместо использования SYN match просто используйте match. например:
hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"
match
имеет более высокий приоритет, чем syn-match (т. е. его подсветка будет переопределять подсветку, генерируемую syn-match), и (хорошие) синтаксические файлы не должны связываться с ним.
одно предостережение с совпадением заключается в том, что это за окно, а не за буфер.
Если вам нужны дополнительные матчи, Вы можете использовать 2match и 3match.
посмотреть :help :match
в Vim для получения дополнительной информации.
Я обычно делаю это так:
:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"
au
расшифровывается как autocmd
. Помощь расскажет больше.