Я создал augroup
в моем .vimrc
содержащий несколько , autocmd
и мне нужно , чтобы включить / отключить их autocommand
на лету.
Идея состоит в том, чтобы создать отображение (скажем, F4например), которое включало бы эти автокоманды при однократном нажатии и отключало их при повторном нажатии без необходимости создания исходного файла или перезагрузки .vimrc
.
Как я могу это сделать?
key-bindings
autocmd
statox
источник
источник
else
ветку, выполнивautocmd!
безоговорочно в начале.exists('#TestAutoGroup#BufEnter')
вернуться послеautocmd!
?(Я действительно понял это сам, но так как я не нашел ответа на этом сайте, я подумал, что это может быть полезно для создания вопроса с самостоятельным ответом )
Для этого можно создать следующую функцию и поместить ее в
.vimrc
:Функция создает переменную, используемую для определения, была ли группа ранее включена или нет.
Когда он не был включен, группа заполняется требуемыми автокомандами. Если группа была ранее включена, мы используем ее
autocmd!
для «сброса», то есть удаляем ранее введенную в нее команду.Соответствующая документация здесь
Наконец, можно создать следующее отображение:
использовать F4для вызова функции.
РЕДАКТИРОВАТЬ : Карл Ингве Lervåg предложил улучшенную версию этой функции, которая уменьшила количество строк кода, я чувствовал, что было бы хорошо, чтобы обе версии, первая из которых все еще работает, может быть легче понять таким дебютантом vimscript, как я.
Вот улучшенная функция Карла, большое ему спасибо:
В этой версии группа всегда сбрасывается, и если она не была включена, она заполняется требуемыми автокомандами
источник
Я считаю, что простой способ заключается в использовании глобальной переменной. Пример:
Для получения дополнительной помощи см .:
источник