Як я автоматично створюю відповідні дужки в 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це, що може спрацювати.