gVim: удалить группы подсветки синтаксиса

Первоначальное название было "Языковые схемы, не зависящие от языка, не позволяют более простым цветам окрашивать определенные языковые теги".

Я использую gVim 7.3 (на Ubuntu 12.04 Arch x86 / 64, для этого имеет значение).

ОБНОВЛЕНИЕ (2013-03-02):

Я думаю, что могу наконец выразить именно то, что имею в виду (я все еще не мог найти правильную команду, предполагая, что она даже существует!). В основном это поток:

  1. начать сеанс с небольшой цветовой схемы, которая определяет несколько основных групп (например, Statement, Comment, Function);
  2. переключитесь на "большую" цветовую схему (например, Solarized или Jellybeans), которая определяет более конкретные группы (например, vimCommand, hsImport или rubyBeginEnd). Эти более конкретные группы имеют приоритет над основными;
  3. переключиться обратно на "меньшую" цветовую схему (ту, которая не определяет конкретные группы).

В результате сеанс захламлен "бездомной" группой, которая скрывает основные и не позволяет выделить некоторые слова. Эти бездомные группы выглядят следующим образом:

ВХОД :hi vimCommandВойти
ВЫХОД vimCommand xxx cleared

Кстати, нечто подобное испытывается и выпускается в системе отслеживания проблем github в Solarized → Vim colorscheme оставляет за собой разрушение при переключении


ОБНОВЛЕНИЕ (2012-11-25):

Возможно, хорошим решением было бы очистить переменные "основного момента" текущего сеанса (я не говорю о таких переменных, как smartindent, encoding, number, а о переменных вроде Statement, CommentrubyClass, xmlTagто есть те, которые определены такими командами, как hi link ..., highlight ..., так далее.).
Если бы кто-нибудь мог объяснить, как он хранится в памяти, это могло бы помочь мне выяснить, как его очистить (я пытался сохранить сеанс через :mksession mysession.vim и затем изучаем его, но нет никаких следов какой-либо переменной подсветки синтаксиса).

Кроме того, и это только смутное предположение, кажется, что причина :hi clear не очищает выделенные группы в том, что "остатки" были определены через косвенное определение (например, hi link).


Оригинал:

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

Во время сеанса я переключаюсь на jellybeans colorscheme (:colo jellybeans), который имеет гораздо больше опций, чем моя цветовая схема по умолчанию:
jellybeans.vim

Если я снова переключусь на цветовую схему по умолчанию (:colo blueshifted), некоторые выделения отключены:
введите описание здесь

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

Я знаю, что языковые теги jellybeans остаются в "кэше" и отвечают за отключение функции автокраски, потому что, если я переключаюсь между цветовыми схемами, которые не имеют языковых тегов (без использования jellybeans), автокраска не разрушена.

То же самое происходит с другими цветовыми схемами (например, railscasts.vim использует HTML-специфическую раскраску). Я знаю, что могу решить эту проблему, добавив недостающие теги в менее конкретную цветовую схему, но я ищу более общее решение.

Вопросы

  • Что я могу сделать, чтобы избежать автоматического отключения этих цветов (используемых при загрузке первой цветовой схемы), когда менее детальная цветовая схема загружается после более детальной цветовой схемы?

  • Могу ли я очистить кэш сеанса (т.е. удалить конкретные теги, используемые jellybeans.vim из "кеша сеанса"), когда я изменяю цветовую схему?

Мои попытки Это команды, которые я использовал в различных комбинациях, но безрезультатно:

:syntax off
:syntax clear
:hi clear
:syntax reset

Единственное, что работает (очевидно!) - это переопределение вручную hi link Команды отсутствуют в "простой" цветовой схеме. Но, конечно, это не отличается, если использовать другую цветовую схему (например, Solarized) с измененными цветами. Конечно, это не решение вопроса "Как удалить остатки выделенных групп?".

1 ответ

Решение

Я могу немного опоздать:-) но я думаю, что решил эту проблему. Ниже приводится цитата из поста, который я сделал на трекере Solarized на GitHub.


Всем привет,

Извините, что вмешался здесь через год после последнего комментария и предложил закрыть вопрос по проекту, в котором я не участвую (хотя я счастливый пользователь:-), однако я считаю, что: 1. это вызвано ошибкой в Vim и 2. Я нашел довольно элегантный обходной путь. Итак, я полагаю, этот вопрос можно закрыть?

Несколько лет назад я написал плагин переключателя цветовой схемы для Vim, но никогда не публиковал его. Вскоре после создания моего плагина я заметил поведение, описанное в этой проблеме, и был раздражен этим, убедившись, что это ошибка в Vim. Я даже зашел так далеко, что попытался исправить проблему в коде Vim C, но это было слишком для меня:-]. Тогда я никогда не слышал о соляризации; Я столкнулся с проблемой с парой других цветовых схем (включая мою собственную).

Сегодня я решил опубликовать плагин переключателя цветовой схемы (см. http://github.com/xolox/vim-colorscheme-switcher), и перед тем, как опубликовать плагин, я решил еще раз попытаться исправить описанную здесь проблему. Я испробовал все виды неприятных хаков, но в итоге получил довольно элегантный обходной путь, который не кажется слишком хрупким. В readme / homepage содержится объяснение того, как это работает (я привожу это ниже для вашего удобства).


То, как пишутся цветовые схемы Vim, на самом деле не совместимо с идеей быстрого переключения между множеством цветовых схем. На мой взгляд, это ужасная деталь реализации того, как Vim работает внутри, другими словами, я думаю, что это ошибка, которую нужно исправить… Вот несколько ссылок, которые объясняют проблему более подробно:

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

  1. При запуске создается словарь, который будет использоваться для запоминания ссылок между выделенными группами.
  2. До и после загрузки цветовой схемы подключаемый модуль переключателя цветовой схемы запускает команду : highlight без каких-либо аргументов, чтобы найти ссылки между группами подсветки. Каждая найденная ссылка добавляется в словарь. Существующие записи обновляются. Это делается по телефону xolox#colorscheme_switcher#find_links(),
  3. После загрузки цветовой схемы подключаемый модуль переключателя цветовой схемы запускает команду : highlight без аргументов, чтобы найти группы подсветки в состоянии "очищено". Для каждой из этих групп, если они были ранее связаны, ссылка восстанавливается. Это делается по телефону xolox#colorscheme_switcher#restore_links(),

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


Я хотел бы получить отзыв о (используемой техникой) переключателе цветовой схемы; Я надеюсь, что это работает так же хорошо для вас, как и для меня. Я протестировал его в Vim 7.3 на Linux (GTK) и в MacVim 7.3.

Другие вопросы по тегам