Нет общего способа сделать это без изменения исходного кода плагина. Некоторые плагины (как и все мои) могут добавить эту функцию (у меня в фреймворке есть функция «выгрузить», но я использую ее в основном для обновления без перезапуска vim, а не для временного отключения чего-либо). Что вы определенно можете сделать, это добавить вызов функции к каждому исходному файлу плагина, который сохранит текущее состояние vim, а также что-то, что будет делать это после загрузки плагина (из-за существования finish
, throw
, try | <code with some error>
вы не могу просто добавить эту функцию в конце плагина), вероятно, на события VimEnter
, FileType
и Syntax
. Затем вам нужно иметь функцию, которая будет возвращать изменения, внесенные в плагин, и определение функции s:Execute
в каждом плагине, например:
function s:Execute_I_do_not_expect_function_with_this_suffix_to_be_defined_by_the_plugin_so_I_add_it_to_avoid_name_collisions(s)
execute a:s
endfunction
. Это необходимо для выполнения строки кода в контексте исходного сценария. Под «состоянием», которое необходимо сохранить, я имею в виду
- Отображения
- Команда
- Знаки
- Функции
- Меню
- События (автокоманды)
- Синтаксис (вероятно, будет пустым до запуска плагина)
- Опции
- Некоторые переменные vim, все глобальные, буферные, табуляционные и оконные
- // Скрипт-локальные переменные. Хотя здесь все просто: в начале скрипта локальная область действия скрипта пуста, и все, что вам нужно, это очистить ее при отключении.
Для каждого элемента можно отменить изменения, сделанные плагином, но это не так просто кодировать. И наличие <script>
аргумента для отображений не различимо с присутствием nore
, хотя они ведут себя по-разному.
Если вы хотите написать это, не забывайте о том, что, если скрипт получит ресурсы, ваш код будет перезапущен.
Также обратите внимание на событие SourcePre
. Это поможет с автоматическим добавлением ваших строк ко всем плагинам.
Не забывайте, что есть и другие места, которые можно изменить и которые не могут быть сохранены и восстановлены легко или вообще: файловая система, состояние интерпретаторов, буферы открытых плагинов и т. Д.