Как заставить Vim автоматически ставить конечные фигурные скобки?

При редактировании файлов .scm было бы здорово, если бы Vim автоматически ставил закрывающую скобку ), как только я запускаю (. Как мне это сделать?


person unj2    schedule 19.05.2009    source источник


Ответы (11)


Вы можете сопоставить открывающую скобку по своему вкусу:

:imap ( ()<left>
person soulmerge    schedule 19.05.2009
comment
Плагины, упомянутые в других ответах, имеют то преимущество, что ведут себя разумно при вводе соответствующего закрытия). Если это не нужно, то я бы также пошел с прямой картой. - person user55400; 20.05.2009
comment
Некоторые плагины также: - не расширяются в контекстах комментариев и строк, - определяют способ окружить выделение парой квадратных скобок, - вставляют заполнитель/маркер, чтобы перейти за закрывающую скобку (что соответствует большинству фрагментов кода). плагины расширения /templates). - person Luc Hermitte; 20.05.2009
comment
Есть ли способ сделать это только в конце строки? Иногда это больше раздражает, чем полезно, но с этим я бы с удовольствием использовал его... - person alexpinho98; 22.07.2013

Попробуйте использовать плагин AutoClose.

person Mykola Golubyev    schedule 19.05.2009
comment
Не путать с другим, менее агрессивным (и менее раздражающим, IMO), AutoClose от Тьяго Алвеса. - person Andrew Marshall; 26.09.2011
comment
@AndrewMarshall +1, ваша версия из списка гораздо менее раздражает. Я пришел сюда в поисках альтернативы ответу Миколы из-за его причуд. - person Dane O'Connor; 13.10.2011
comment
К вашему сведению, этот плагин, кажется, работает нормально, но для меня он привел к запаздыванию <ESC>. Так что избегайте, если вы заботитесь об этом. - person Steven Lu; 31.05.2013

Самый простой ответ - включить карту. Например.:

:inoremap ( ()<left>

Проблема в том, что вам нужно будет добавить одну запись для каждого символа, который вы хотите автоматически закрыть ('{','[','"', и т. д.). Кроме того, плагины обычно более умны, обеспечивая такие вещи, как обнаружение "закрытия" характер и не повторять его.

Проблема с приведенным выше решением и с большинством подключаемых модулей заключается в том, что они имеют тенденцию нарушать последовательность отмены (gundo любой?), как описано в :help ins-special-special.

Вот список плагинов, которые делают то, что вы просите (из vimtips):

  • delimitMate от Исраэля Чаука Фуэнтеса (настраивается и не прерывает отмену/повторение/повторение, но - сломать iabbr) также на GitHub
  • AutoClose от Karl Guertin (автоматически закрывает определенные жестко запрограммированные символы, но не прерывает отмену). /повторить/повторить)
  • AutoClose от Тьяго Алвеса (настраивается, но прерывает отмену/возврат/повтор)
  • авто-пары Автопары Мяо Цзяна (настраивается, но прерывает отмену/повторение/повторение)
  • ClosePairs Эдоардо Вакки (настраивается, но прерывает отмену/повтор/повтор)
  • smartinput от Kana Natsuno (настраивается, но прерывает отмену/повторение/повторение)

Помимо vimtips, есть еще одно хорошее объяснение проблемы в Интернете.

person Rafael Barbosa    schedule 21.01.2013
comment
Для всех, кто найдет это в будущем, я только начал использовать автопары, и если я не понимаю терминологию неправильно, это не нарушило мою отмену или историю. Лучший из этого списка! Он также обрабатывает удаление пар на backspace! - person Lethjakman; 27.04.2013
comment
Какая версия Вима? В прошлый раз, когда я проверял, по-прежнему не было решения, позволяющего отменить/повторить/повторить работу с автоматическим закрытием в Vim 7.4 и более поздних версиях. Несколько плагинов имели хак с использованием setline(), который работал в более ранних версиях Vim. - person Ben; 28.07.2014

Мне он тоже нужен, и я уже попробовал несколько плагинов:

Автозакрытие, http://www.vim.org/scripts/script.php?script_id=1849, немного агрессивен.

простые пары, http://www.vim.org/scripts/script.php?script_id=2339, зависит от Python. Если вы работаете в Linux, это не проблема, но в Windows может возникнуть проблема сопоставить версию Vim с интерпретатором Python, который у вас есть.

Я бы посоветовал использовать ClosePairs, которые вы можете найти по адресу http://www.vim.org/scripts/script.php?script_id=2373, который у меня отлично работает. Это просто и полезно.

person Caglar Toklu    schedule 19.05.2009

Есть много советов и плагинов на эту тему. Посмотрите соответствующую запись на сайте vimtips.

person Luc Hermitte    schedule 19.05.2009

В настоящее время я использую автопары, и это работает очень хорошо.

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

Только одно предостережение: я не мог использовать :helptags для создания файла справки с этим подключаемым модулем на момент написания этой статьи.

person nanyaks    schedule 27.07.2013

Оцените этот новый плагин: vim-autoclose by Townk. Ранее упомянутый AutoClose был слишком агрессивным и иногда вел себя нежелательным образом.

person Ory Band    schedule 24.09.2012

Есть проблема с использованием этого (через имап или один из скриптов). Вы не сможете повторить полное редактирование с помощью команды ..

e.g. (foo) with . only gets you foo, without the brackets.

Он отлично работает, если вы вставляете скобки как два символа.

person Community    schedule 21.05.2009


https://github.com/vim-scripts/Auto-Pairs

Протестировал этот плагин на undu redo. 2013 Это просто работает. Также с плагином python-mode.

person vrcmr    schedule 13.03.2013

Есть новый плагин от cohama:

lexima.vim (github)

(пока не на vim.org)

Этот плагин поддерживает команду .!
На самом деле, это единственный плагин, поддерживающий это.

Также работает последовательность отмены/возврата.

person Hotschke    schedule 03.08.2015