Временно отключить плагин vim без перезапуска - PullRequest
5 голосов
/ 29 марта 2012

Я использую c-support в Vim.Одной из его особенностей является автоматическое расширение комментариев .

Когда я вставляю код в Vim из внешнего редактора, комментарии расширяются (что дает мне двойной комментарий и портит вставку - см. Ниже, например).Я хотел бы иметь возможность отключить плагин, вставить, а затем снова включить его, без перезапуска Vim.Я не уверен, возможно ли это.

SO вопросы здесь , здесь и здесь все описывают способы отключения плагинов, но все они требуют, чтобы я закрыл Vim, связывайтесь смой .vimrc или аналогичный и перезапуск;если мне придется закрыть Vim, я могу также cat file1 >> myfile; vim myfile, а затем сместить строки внутри, что будет так же быстро.

Можно ли отключить плагин во время работы vim без перезапуска, желательно таким способом, который позволяет мне сопоставить горячую клавишу toggle-plugin (так что повторное использование ~/.vimrc в порядке; это сопоставимо сгорячая клавиша [я представляю, еще не пробовал])?


Невероятные комментарии:


/*
 *  *  Authors:
 *   *    A Name 
 *    *
 *     *  Copyright:
 *      *    A Name, 2012
 *       */

РЕДАКТИРОВАТЬ: Оказывается, вы можете :set paste,:set nopaste (который, по выражению :help paste, будет «избегать неожиданных эффектов [при вставке]». (См. Комментарии).
Однако мне все еще интересно, можно ли отключить / включить плагин в соответствии сОригинальный вопрос, поэтому я оставлю вопрос открытым.

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Вставьте ": set paste", затем вставьте свой код.После этого вставьте: установите unpaste

1 голос
/ 30 марта 2012

Нет общего способа сделать это без изменения исходного кода плагина. Некоторые плагины (как и все мои) могут добавить эту функцию (у меня в фреймворке есть функция «выгрузить», но я использую ее в основном для обновления без перезапуска 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

. Это необходимо для выполнения строки кода в контексте исходного сценария. Под «состоянием», которое необходимо сохранить, я имею в виду

  1. Отображения
  2. Команда
  3. Знаки
  4. Функции
  5. Меню
  6. События (автокоманды)
  7. Синтаксис (вероятно, будет пустым до запуска плагина)
  8. Опции
  9. Некоторые переменные vim, все глобальные, буферные, табуляционные и оконные
  10. // Скрипт-локальные переменные. Хотя здесь все просто: в начале скрипта локальная область действия скрипта пуста, и все, что вам нужно, это очистить ее при отключении.

Для каждого элемента можно отменить изменения, сделанные плагином, но это не так просто кодировать. И наличие <script> аргумента для отображений не различимо с присутствием nore, хотя они ведут себя по-разному.

Если вы хотите написать это, не забывайте о том, что, если скрипт получит ресурсы, ваш код будет перезапущен.

Также обратите внимание на событие SourcePre. Это поможет с автоматическим добавлением ваших строк ко всем плагинам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...