Как переопределить подсветку синтаксиса по умолчанию в vim?

в VIM мне нужно выполнить простую задачу-выделить "(" и ")". Я могу сделать это легко, выдав две команды:

:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000

но если я добавлю те же команды (без ':', конечно )в пустой.vimrc и перезапуск VIM - " ("и ")" больше не выделяются .cpp-файлы. Кажется, что если я создаю / загружаю .cpp-файл, VIM загружает синтаксический файл для него, который переопределяет мои пользовательские основные моменты. Как настроить основные моменты в my .файл vimrc так это пройдет после стандартного синтаксиса определения или не будут затронуты стандартным синтаксическим определением?

4 ответов


есть четыре варианта (два из которых были предложены другим):

  1. использовать after структура в vimfiles (~/.vim / after / синтаксис / cpp.vim):

    :help after-directory
    
  2. используйте match для текущего окна:

    :match really_unique_name "[()]"
    
  3. используйте 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)
    
  4. установите 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

вы также можете быть заинтересованы в моем ответе этот вопрос, который охватывает более общую подсветку оператора.


поставить настройки в ~/.vim / after / синтаксис / cpp.ВИМ


вместо использования 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. Помощь расскажет больше.