Куда относятся пользовательские правила подсветки?

11

Иногда я хочу переопределить синтаксис по умолчанию, выделяющий цвета и стили, с моими собственными предпочтениями.

Я думаю, что наиболее подходящий способ сделать это - создать собственную цветовую схему. Однако у меня есть пара вопросов.

  1. Если я хочу установить выделение для определенной группы синтаксиса на определенном языке, это относится к моей схеме цветов или было бы лучше разместить ее after/syntax/[filetype].vim?

    highlight jsAssignExpIdent cterm=bold gui=bold
    

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

  2. Иногда я создаю новые правила синтаксиса для конкретного языка, в after/syntax/[filetype].vim. Если другие пользователи захотят использовать эти расширения, было бы целесообразно предоставить там правила подсветки по умолчанию, которые ссылаются на общие группы подсветки по умолчанию? Если другой пользователь хочет переопределить этот цвет выделения, как он должен это сделать?

    ::::: after/syntax/asm.vim :::::
    
    syn match asmHexNumber /\(0x\|\$\)[0-9A-Fa-f]\+/
    highlight default link asmHexNumber Number
    
joeytwiddle
источник

Ответы:

9

Первый вопрос

Основные определения принадлежат вашей цветовой схеме. Тот факт, что они загружаются для каждого буфера, независимо от их языка, не должен быть проблемой вообще.

Если вы не хотите редактировать вашу цветовую схему, вы можете поместить эти выделения в plugin/myhighlights.vim:

function! MyHighlights()
    highlight ...
    highlight ...
endfunction

augroup MyHighlights
    autocmd!
    autocmd ColorScheme * call MyHighlights()
augroup END

Второй вопрос

Ваш пример - именно то, что вы должны делать и как делает каждый синтаксический скрипт. Этот метод позволяет разработчику плагина определять вменяемые настройки по умолчанию, не вынуждая определенные цвета в горло своего пользователя.

romainl
источник
Спасибо за подтверждение. Но меня беспокоит, если я highlight link ...добавлю в файл синтаксиса команды, которые будут перезаписывать настройки из схемы цветов при каждой загрузке файла с этим типом файла. Должен ли я делать это толькоhighlight link ... после проверки, что для этого имени не существует правила выделения?
Joeytwiddle
Ах, мне не нужно беспокоиться. Vim docs говорит: если для {from-group} уже есть настройки подсветки, ссылка не создается, если только '!' дано. Для команды «: highlight link» в исходном файле вы не получите сообщение об ошибке. Это можно использовать для пропуска ссылок для групп, которые уже имеют настройки.
Joeytwiddle
Но для людей, изменяющих свои схемы цветов, a highlight linkв схеме цветов может быть позже перезаписано highlight linkв файле синтаксиса. Чтобы избежать этого, вместо ссылки можно использовать реальные аргументы (ctermbg, guifg, ...).
Joeytwiddle
У пользователя должно быть последнее слово о том, какие цвета используются для данной группы подсветки. В связи с этим нередко можно видеть определения основных моментов для разных языков в цветовых схемах. Вы должны использовать только highlight link ...в своем синтаксическом скрипте и позволить своим пользователям переопределять его, если они хотят.
Ромен
Меня беспокоило то, что если пользователи используют highlight link ...в своей схеме цветов, то файл синтаксиса может позже сбросить его со своим собственным highlight link .... Теперь я вижу, что хорошие синтаксические файлы избегают этого с помощью highlight default link .... Вероятно, это должно быть исправлением asmHexNumberправила в моем вопросе.
Joeytwiddle