gVim: удалить группы подсветки синтаксиса
Первоначальное название было "Языковые схемы, не зависящие от языка, не позволяют более простым цветам окрашивать определенные языковые теги".
Я использую gVim 7.3 (на Ubuntu 12.04 Arch x86 / 64, для этого имеет значение).
ОБНОВЛЕНИЕ (2013-03-02):
Я думаю, что могу наконец выразить именно то, что имею в виду (я все еще не мог найти правильную команду, предполагая, что она даже существует!). В основном это поток:
- начать сеанс с небольшой цветовой схемы, которая определяет несколько основных групп (например, Statement, Comment, Function);
- переключитесь на "большую" цветовую схему (например, Solarized или Jellybeans), которая определяет более конкретные группы (например, vimCommand, hsImport или rubyBeginEnd). Эти более конкретные группы имеют приоритет над основными;
- переключиться обратно на "меньшую" цветовую схему (ту, которая не определяет конкретные группы).
В результате сеанс захламлен "бездомной" группой, которая скрывает основные и не позволяет выделить некоторые слова. Эти бездомные группы выглядят следующим образом:
ВХОД :hi vimCommand
Войти
ВЫХОД vimCommand xxx cleared
Кстати, нечто подобное испытывается и выпускается в системе отслеживания проблем github в Solarized → Vim colorscheme оставляет за собой разрушение при переключении
ОБНОВЛЕНИЕ (2012-11-25):
Возможно, хорошим решением было бы очистить переменные "основного момента" текущего сеанса (я не говорю о таких переменных, как smartindent
, encoding
, number
, а о переменных вроде Statement
, Comment
rubyClass
, xmlTag
то есть те, которые определены такими командами, как hi link ...
, highlight ...
, так далее.).
Если бы кто-нибудь мог объяснить, как он хранится в памяти, это могло бы помочь мне выяснить, как его очистить (я пытался сохранить сеанс через :mksession mysession.vim
и затем изучаем его, но нет никаких следов какой-либо переменной подсветки синтаксиса).
Кроме того, и это только смутное предположение, кажется, что причина :hi clear
не очищает выделенные группы в том, что "остатки" были определены через косвенное определение (например, hi link
).
Оригинал:
Когда моя цветовая схема по умолчанию ( модифицированная версия blueshift) загружена, каждый тег, который должен быть выделен, правильно окрашен.
Во время сеанса я переключаюсь на jellybeans colorscheme (:colo jellybeans
), который имеет гораздо больше опций, чем моя цветовая схема по умолчанию:
Если я снова переключусь на цветовую схему по умолчанию (: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 работает внутри, другими словами, я думаю, что это ошибка, которую нужно исправить… Вот несколько ссылок, которые объясняют проблему более подробно:
- Vim colorscheme оставляет за собой разрушение при переключении
- gVim: удалить группы подсветки синтаксиса
Поскольку такое поведение препятствует циклическому переходу между цветовыми схемами, плагин переключателя цветовых схем включает обходной путь, который должен скрыть проблему:
- При запуске создается словарь, который будет использоваться для запоминания ссылок между выделенными группами.
- До и после загрузки цветовой схемы подключаемый модуль переключателя цветовой схемы запускает команду : highlight без каких-либо аргументов, чтобы найти ссылки между группами подсветки. Каждая найденная ссылка добавляется в словарь. Существующие записи обновляются. Это делается по телефону
xolox#colorscheme_switcher#find_links()
, - После загрузки цветовой схемы подключаемый модуль переключателя цветовой схемы запускает команду : highlight без аргументов, чтобы найти группы подсветки в состоянии "очищено". Для каждой из этих групп, если они были ранее связаны, ссылка восстанавливается. Это делается по телефону
xolox#colorscheme_switcher#restore_links()
,
Возможно, это решение все еще не идеально, но оно намного лучше, чем стандартное поведение: до того, как я реализовал описанные выше шаги, когда я перебирал бы свои цветовые схемы, Vim в конечном итоге получал черный текст на белом фоне и ничего больше! С помощью описанных выше шагов я могу циклически повторяться столько раз, сколько захочу, и все цветовые схемы, которые я проверял до сих пор, выглядят хорошо.
Я хотел бы получить отзыв о (используемой техникой) переключателе цветовой схемы; Я надеюсь, что это работает так же хорошо для вас, как и для меня. Я протестировал его в Vim 7.3 на Linux (GTK) и в MacVim 7.3.