Бледные цвета в vim в xterm на OpenSuSE с esckeys

Рассмотрим следующую настройку. Редактор Vim (>= 7.3) запускается в xterm с темным фоном и настройками Vim background=dark, syn on и изначально noesckeys. Благодаря настройке темного фона и включенной подсветке синтаксиса ключевые слова выделяются яркими и жирными цветами. Теперь, если я запускаю :set esckeys (через .vimrc или интерактивно) и нахожусь в OpenSuSE (12.3), все цвета становятся бледными (но что-то другое, чем background=light) либо сразу, либо после нескольких нажатий клавиш. Я не могу воспроизвести это поведение ни в одной системе Debian. Теперь, к сожалению, я хочу установить esckeys, потому что это полезно с латексом.

В чем причина такого странного поведения или как определить причину?

Есть ли обходной путь для одновременного использования жирных цветов и esckeys?


person Helmut Grohne    schedule 14.01.2014    source источник
comment
Если вы можете воспроизвести проблему, укажите свою конфигурацию (версия Vim, ОС) в качестве комментария.   -  person Helmut Grohne    schedule 14.01.2014
comment
То, что сказал @helmut, но как редактирование вашего вопроса (не комментарий).   -  person Johnsyweb    schedule 15.01.2014


Ответы (1)


Это будет сложно, поэтому давайте вместе разработаем вики-ответ сообщества.

Происхождение исходной цветовой схемы не совсем ясно. Взгляд на :scriptnames с --noplugins дает представление о том, откуда это может взяться:

  1: /etc/vimrc
  2: /usr/share/vim/vim73/syntax/syntax.vim
  3: /usr/share/vim/vim73/syntax/synload.vim
  4: /usr/share/vim/vim73/syntax/syncolor.vim
  5: /usr/share/vim/vim73/filetype.vim
  6: ~/.vimrc
  7: /usr/share/vim/vim73/syntax/nosyntax.vim
  8: /usr/share/vim/vim73/ftplugin.vim
  9: /usr/share/vim/vim73/indent.vim

Единственный файл, содержащий определения цветов, это $VIMRUNTIME/syntax/syncolor.vim. Он содержит определения, которые имеют term=bold или term=underline и cterm=NONE для большинства основных моментов, когда &background == "dark". Предполагается, что изначально Vim использует атрибуты term. Почему?

С настройкой esckeys Vim повторно инициализирует терминал после нажатия клавиши (например, движения). В частности, он выдает escape-последовательность, которая очищает экран и перерисовывает все. Почему?

Во время повторной инициализации, по-видимому, он снова делает syntax on, тем самым косвенно вызывая $VIMRUNTIME/syntax/syncolor.vim снова (strace показывает, что файл снова читается). В этот момент Vim явно использует атрибуты cterm и очищает все атрибуты жирности, объясняющие наблюдение.

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

person Community    schedule 15.01.2014