Как автоматически создать соответствующие фигурные скобки в vim?
Как вы увидите, эта проблема нетривиальна. Ответ прост: используйте плагин, такой как autoclose или smartinput . Просто наивно переназначьте ([.. ключи предоставят вам крайние регистры в несколько строк, вот почему эти плагины сделаны, и почему они обычно довольно сложны (если они хороши).
Поэтому я использовал UltiSnips, чтобы вставить закрывающую скобку
Вы можете попробовать это вместо этого (что отличается от моего первоначального предложения):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Где UltiSnips будет разделять линию (
вместо включения main
в матч. Проблема с использованием плагина сниппета для этого состоит в том, что они (обычно) не поддерживают вложение, поэтому они забудут любые позиции перехода, когда вставлен следующий (вложенный) фрагмент.
Чтобы выпрыгнуть из пары скобок, используется комбинация Ctrl-j.
Вы можете переназначить Ctrl-jлибо для UltiSnips, либо для конфликтующего плагина. Если сопоставления не перечислены в документации, вы можете использовать :map/imap/nmap <key>
для отображения сопоставления. Если вы хотите Ctrl-jвыбрать и выполнить работу обоих плагинов, вы просите:
- что-то намного более продвинутое, чем я подозреваю
- что-то я подозреваю, что вы не очень хотите
Рассмотрим этот цикл bash:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
В этом случае вам нужно будет нажать Ctrl-j5 раз, чтобы попасть в тело цикла. Использование закрывающих скобок для выпрыгивания из соответствующей пары дает вам гораздо больший контроль над тем, куда вы действительно хотите переместить курсор. Вы можете реализовать стек для отслеживания вставленных пар и использовать его Ctrl-jдля перемещения и перемещения, но тогда у вас возникнут проблемы, если вы начнете удалять фигурные скобки вручную, не удаляя их из стека. Итак, вы начнете решать проблемы, которые пытаются решить подключаемые модули. Это сложное колесо для изобретения.
Расширяя это, вы можете получить то, что изначально просили, используя Ctrl-jвыпрыгивание из фигурных скобок и фрагментов. Если вы используете какое-то фиктивное значение для представления позиций фрагментов и помещаете их в стек в дополнение к закрывающим скобкам, с динамическим переназначением Ctrl-jдля соответствия обработке фрагментов или скобок. Но тогда вам нужно будет реализовать некоторые довольно продвинутые эвристики, чтобы выяснить, какая магия должна произойти, поскольку вы по сути берете на себя сразу две проблемы, которые в настоящее время решаются создателями плагинов для вставки фрагментов и плагинов для сопоставления скобок, и снова решить эти проблемы, в дополнение к их решениям, для достижения удобства и, что ж, волшебства.
Все сводится к контролю против удобства. Я думаю, что управление в этом случае будет вам лучше, а значит, вы должны разделить эти проблемы и связанные с ними плагины и сопоставления клавиш. Если вы все еще хотите удобство, это выполнимо, но это сложно.
)
, переназначение,c-j
что может работать.