Вопрос или проблема
Когда я открываю терминал, перехожу в настройки, а затем в цвета, я могу изменить большинство цветов, но есть один, который, похоже, я не могу изменить.
Вот как это выглядит в файле Java:
Единственный раз, когда я вижу этот цвет, это когда я редактирую файл на Java, C или C++ (я уверен, что он также появляется для файлов на других языках). Все ключевые слова, связанные с классами, объектами или переменными, отображаются этим цветом (см. изображение, приведенное выше).
Есть ли способ выяснить, где хранится значение этого цвета, и изменить его? Если это имеет значение, я использую vim
.
Как токены выделяются в vim
, зависит от фактической цветовой схемы vim
и от текущего языка.
Существует множество способов изменить фактическую цветовую схему для текущего языка; я собираюсь описать, как внести небольшие изменения в фактическую цветовую схему для конкретного языка и для темы по умолчанию, для одного пользователя, так как это, вероятно, самый распространенный сценарий.
Во-первых, вам нужно определить, к какой синтаксической группе относится токен, который вы хотите изменить; откройте файл на вашем целевом языке с помощью vim
, установите курсор на любой символ токена (в данном случае, например, на p
/ u
/ b
/ … в public
) и выполните:
:echo synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')
Это выведет имя синтаксической группы текущего токена (в данном случае: Type
).
Также вам нужно будет выяснить тип файла вашего целевого языка:
:set filetype?
Это выведет текущий тип файла текущего файла (в данном случае: java
).
Затем вам нужно будет сказать vim
, чтобы выделить синтаксическую группу Type
в файлах java
с использованием другого цвета.
Сначала создайте каталог для хранения переопределений синтаксических правил:
mkdir -p ~/.vim/after/syntax
Выберите цвет, совместимый с 256-цветными терминалами, затем создайте файл с таким же именем, как тип файла + .vim
(в данном случае java.vim
):
vim ~/.vim/after/syntax/java.vim
Наконец, добавьте эту строку в файл, заменив 196
на выбранный вами цвет:
highlight Type ctermfg=196
Вот результат при переопределении имен sub
в Perl (обратите внимание, как токен foo
меняется с cyan на red); до:
после:
Ответ или решение
Чтобы изменить определённый цвет в Vim, можно воспользоваться настройкой синтаксиса для конкретного языка программирования. Вот пошаговое руководство, как это сделать.
Шаг 1: Узнайте, к какой группе синтаксиса относится нужный вам токен
Откройте файл на нужном языке (например, Java) в Vim, переместите курсор на токен (например, на слово public
), и выполните следующую команду:
:echo synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')
Эта команда выведет имя синтаксической группы для текущего токена. В вашем случае это может быть, например, Type
.
Шаг 2: Узнайте, какой тип файла обрабатывается
Чтобы узнать, какой тип файла открыт в данный момент, выполните:
:set filetype?
Это позволит вам убедиться, что текущий файл обрабатывается как Java (или другой язык).
Шаг 3: Создайте директиву для переопределения синтаксисов
Создайте директорию для хранения переопределений синтаксических правил:
mkdir -p ~/.vim/after/syntax
Затем создайте файл с именем, соответствующим типу файла, который вы хотите настроить. Например, для Java:
vim ~/.vim/after/syntax/java.vim
Шаг 4: Настройте требуемую цветовую схему
В открывшемся файле добавьте строку, которая изменяет цвет для синтаксической группы, полученной на первом шаге. Например, если вы хотите изменить цвет для группы Type
, добавьте:
highlight Type ctermfg=196
Здесь 196
— это номер цвета из таблицы 256 цветов. Вы можете выбрать любой другой цвет, основываясь на этой таблице цветов.
Пример
Если вы переопределили цвет синтаксиса для группы Type
, исходный цвет текста для токенов такого типа изменится. Чтобы проверить изменения, откройте файл Java и посмотрите, как отобразились токены.
Заключение
Теперь вы знаете, как изменить цвет определённых токенов в Vim для нужного языка. Эти изменения будут применены только для вашего пользователя и не повлияют на других пользователей или глобальные настройки Vim. Это позволяет гибко настраивать ваше рабочее окружение в соответствии с личными предпочтениями.