Vim и версии
Большая проблема с вами заключается в том, что этот вопрос зависит от версии vim.Под версией vim я подразумеваю не версию (7.3 ...), но гораздо больше, если вы используете MacVim, gVim, терминальную версию и т. Д. Версия не важна, потому что параметр t_vb (введите :set t_vb?
, чтобы получить ее).) отличается для разных версий vim, но я напишу об этом позже.
Я использую Ubuntu.В моем терминале я даже не могу произвести эти визуальные вспышки (вероятно, Ubuntu просто игнорирует их, по крайней мере, это то, что происходит с обычным звонком: Эта программа звучит как звонок! ).gVim другой, там работает визуальный звонок.То же самое происходит с Emacs.Визуальный колокольчик (верхняя и нижняя линии, как вы описали) прекрасно работает в версии X.Версия терминала просто тихая.
настройки t_vb
Как некоторые подозревали, параметр t_vb отвечает за визуальный звонок в vim.Но в терминале это выглядит по-разному:
t_vb=^[[?5h$<100/>^[[?5l
и gVim:
t_vb=^[|f
Так что я думаю, что для MacVim тоже будет по-другому.
Кстати: Если вы модифицируете звонок, вы должны сгенерировать ^[
с <C-V>
, за которым следует <ESC>
.Не копируйте строки выше, они не будут работать.
t_vb - это просто строка, которая отправляется на терминал (или gvim).Вы также можете определить t_vb = abcd, который будет временно выводить abcd на вашем курсоре.Это просто отображение магии, вспышки происходят из-за escape-символов.Нет возможности общаться с vim.Однако вы можете изменить весь экран vim (удалить строки, добавить строки и т. Д.).Но если перерисовать дисплей, все пропадет.Основная проблема с этой задачей заключается в том, что escape-последовательности не имеют спящего режима.Вы можете попробовать вставить строку белого цвета и удалить ее, но это просто способ быстро (я пробовал).
Описанное поведение относится только к gVim.Но я думаю, что остальные, вероятно, будут вести себя очень похоже.Однако, если ваш терминал / псевдотерминал поддерживает escape-последовательность, которая выделяет только определенное количество строк, вы сможете делать то, что хотите.
Я могу вас разочаровать, но я не думаю, чтоспособ получить желаемое поведение без изменения источника vim (или модификации программного обеспечения терминала, которое я определенно не рекомендую).
Модификация исходного исходного кода
Если вы хотитечтобы редактировать поведение визуального звонка, как вам нравится, вы всегда можете редактировать C-файлы.Я не рекомендовал бы это, но это определенно не невозможно.Вы можете начать здесь:
http://code.google.com/p/vim/source/browse/src/misc1.c#3433
Удалить "out_str (T_VB);"и вставьте что-то вроде этого (псевдокод):
invert(fist_line)
invert(last_line)
sleep(100 ms)
invert(fist_line)
invert(last_line)
Сон может раздражать.Но это просто самый простой способ (без таймеров и т. Д.).Проблема заключается в том, чтобы найти такую функцию инвертирования.Я бы попытался найти команду, которая выполняет vim-скрипт, а затем попытаться найти подходящую команду vim.Могу поспорить, что это будет возможно.