2014-02-03 1 views
3

Я использую пару автоматических команд, чтобы сделать выделение посторонних пробелов в моей настройке vim на InsertLeave и BufReadPost событиях. Недавно я начал использовать плагин для выделения отступов (https://github.com/nathanaelkane/vim-indent-guides)Создание пользовательского события в Vim

Проблема в том, что если есть пустая строка с отступом, она подсвечивается плагином отступов, а не моими автоматическими командами. То, что я хотел бы сделать, это добавить настраиваемое событие в плагин, так что когда это будет сделано, подсветка я могу настроить, чтобы мои автокоманды запускали и перезаписывали это выделение в тех случаях, когда это необходимо.

Например, это тип потока я хотел бы (или, по крайней мере, что-то подобное):

indent-guides plugin activates 
indent-guides plugin highlights all indentation 
indent-guides plugin triggers custom event signaling it is done 
indent-guides plugin exits 
auto command whitespace highlighter is triggered by indent-guides completion event 

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

autocmd InsertEnter * syn clear EOLWS | syn match EOLWS excludenl /\s\+\%#\@!$/ 
autocmd InsertLeave,BufReadPost * syn clear EOLWS | syn match EOLWS excludenl /\s\+$/ 

EDIT:

Я решил эту проблему другим способом (путем редактирования другого плагина). Это все еще не отвечает на этот конкретный вопрос, поэтому я не буду размещать это как решение.

Мое решение проблемы в виде плагина: https://github.com/ntpeters/vim-better-whitespace

+0

Мне не удалось найти конкретное решение для моего первоначального вопроса, но я решил проблему с помощью плагина, который я написал. Поскольку это не решает исходный вопрос, я не буду публиковать его как решение. Не стесняйтесь проверить плагин. Я связал его в ОП. – PseudoPsyche

ответ

4

VIM уже есть поддержка запуска как нативные, а также события пользовательских пользователей. Поскольку ваш вопрос касается пользовательских событий, я хотел бы привести небольшой пример, чтобы продемонстрировать, как вы можете сделать то же самое.

Это, как вы бы определить событие пользовательского autocmd:

autocmd User MyCustomEvent call my_custom_function() 

Это, как вы бы запустить свой определенный пользовательский autocmd событие:

doautocmd User MyCustomEvent 

Теперь вы можете использовать doautocmd аналогичным образом для запуска как пользовательских событий autocmd, как упомянуто выше, так и собственных событий vim, поэтому в зависимости от вашего варианта использования вам нужно оценить, какой из двух вам нужен. Преимущество пользовательских autocmds заключается в том, что вы можете отдыхать, поскольку никто другой не будет их запускать, тогда как для собственных autommds vim они могут быть вызваны кем угодно.

 Смежные вопросы

  • Нет связанных вопросов^_^