Comment créer automatiquement des accolades correspondantes dans vim?
Ce problème n'est pas anodin, comme vous le verrez. La réponse simple est: utilisez un plugin, comme autoclose ou smartinput . Le remappage naïf des touches ([.. vous présentera des boîtiers électroniques en quelques lignes, c'est pourquoi ces plugins sont créés et pourquoi ils sont généralement assez complexes (s'ils sont bons).
J'ai donc utilisé UltiSnips pour insérer l'accolade de fermeture
Vous pouvez essayer ceci à la place (ce qui est différent de ma suggestion d'origine):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Où UltiSnips divisera la ligne au (
lieu de l'inclure main
dans le match. Le problème avec l'utilisation d'un plugin d'extrait de code pour cela est qu'ils ne prennent généralement pas en charge l'imbrication, ils oublieront donc toutes les positions de saut lors de l'insertion du prochain extrait de code (imbriqué).
Pour sauter hors de la paire d'accolades, la combinaison Ctrl-jest utilisée.
Vous pouvez remapper Ctrl-jpour UltiSnips ou le plugin en conflit. Si les mappages ne sont pas répertoriés dans la documentation, vous pouvez utiliser :map/imap/nmap <key>
pour afficher le mappage. Si vous voulez Ctrl-jchoisir et faire le travail des deux plugins, vous demandez:
- quelque chose de beaucoup plus avancé que je pense que vous pourriez penser
- quelque chose que je soupçonne que vous ne voulez pas vraiment
Considérez cette boucle bash:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
Dans ce cas, vous devrez appuyer Ctrl-j5 fois pour accéder au corps de la boucle. L'utilisation des accolades de fermeture pour sauter hors d'une paire correspondante vous donne beaucoup plus de contrôle sur l'endroit où vous souhaitez réellement déplacer le curseur. Vous pouvez implémenter une pile pour garder une trace des paires insérées et utiliser Ctrl-jpour sauter et déplacer, mais vous rencontrerez des problèmes si vous commencez à supprimer manuellement des accolades sans les supprimer de la pile. Vous allez donc commencer à résoudre les problèmes que les plug-ins d'accolade tentent de résoudre. C'est une roue difficile à réinventer.
En développant cela, vous pouvez obtenir ce que vous avez initialement demandé, en utilisant Ctrl-jpour sauter des accolades et des extraits. Si vous utilisez une valeur fictive pour représenter les positions des extraits et les pousser sur la pile en plus des accolades fermantes, avec un remappage dynamique de Ctrl-jpour correspondre à la remise d'extraits ou d'accolades. Mais ensuite, vous devrez implémenter des heuristiques assez avancées pour comprendre ce que la magie devrait se produire, car vous rencontrez essentiellement deux problèmes à la fois, qui sont actuellement résolus séparément par les créateurs de plugins d'insertion d'extraits et de plugins de correspondance d'accolade, et re-résoudre ces problèmes à nouveau, en plus de leurs solutions, pour atteindre la commodité et, bien, la magie.
Cela revient à contrôler vs commodité. Je pense que le contrôle vous servira mieux dans ce cas, ce qui signifie que vous devriez garder ces problèmes et leurs plugins et mappages de clés associés séparés. Si vous voulez toujours la commodité, c'est faisable, mais c'est difficile.
)
, remapperc-j
à cela pourrait fonctionner.