Wie erstelle ich automatisch passende Klammern in vim?
Dieses Problem ist nicht trivial, wie Sie sehen werden. Die einfache Antwort lautet: Verwenden Sie ein Plugin wie Autoclose oder Smartinput . Durch einfaches Neuzuordnen der Tasten ([..] erhalten Sie Edgecases in mehreren Zeilen. Deshalb werden diese Plugins erstellt und sind normalerweise recht komplex (wenn sie gut sind).
Also habe ich UltiSnips verwendet, um die schließende Klammer einzufügen
Sie könnten dies stattdessen versuchen (was sich von meinem ursprünglichen Vorschlag unterscheidet):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Wobei UltiSnips die Linie aufteilt, (
anstatt sie main
in das Match einzubeziehen . Das Problem bei der Verwendung eines Snippet-Plugins besteht darin, dass es (normalerweise) kein Verschachteln unterstützt, sodass Sprungpositionen beim Einfügen des nächsten (verschachtelten) Snippets vergessen werden.
Zum Herausspringen aus dem Zahnspangenpaar wird die Kombination Ctrl-jverwendet.
Sie können entweder Ctrl-jfür UltiSnips oder das in Konflikt stehende Plugin eine Neuzuordnung vornehmen. Wenn die Zuordnungen nicht in der Dokumentation aufgeführt sind, können Sie sie :map/imap/nmap <key>
anzeigen. Wenn Sie Ctrl-jbeide Plugins auswählen und ausführen möchten , fragen Sie nach:
- Etwas viel Fortgeschritteneres, als ich vermute
- etwas, von dem ich vermute, dass du es nicht wirklich willst
Betrachten Sie diese Bash-Schleife:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
In diesem Fall müssen Sie Ctrl-jfünfmal drücken , um zum Loop-Body zu gelangen. Wenn Sie die schließenden Klammern verwenden, um aus einem entsprechenden Paar zu springen, können Sie viel besser steuern, wo sich der Cursor tatsächlich bewegen soll. Sie könnten einen Stapel implementieren, um eingefügte Paare zu verfolgen und Ctrl-jzum Platzieren und Verschieben zu verwenden, aber dann treten Probleme auf, wenn Sie beginnen, Klammern manuell zu löschen, ohne sie aus dem Stapel zu entfernen. Also werden Sie anfangen, Probleme zu lösen, die die Klammer-Plugins zu lösen versuchen. Das Rad ist schwer neu zu erfinden.
Wenn Sie dies erweitern, können Sie das bekommen, wonach Sie ursprünglich gefragt haben, indem Sie Ctrl-jaus geschweiften Klammern und Auszügen springen . Wenn Sie einen Dummy-Wert verwenden, um die Schnipselpositionen darzustellen, und diese zusätzlich zu den schließenden Klammern auf den Stapel schieben, wobei die dynamische Neuzuordnung der Ctrl-jÜbergabe von Schnipsel oder Klammern entspricht. Dann müssen Sie jedoch einige recht fortgeschrittene Heuristiken implementieren, um herauszufinden, was mit Magie geschehen soll, da Sie im Wesentlichen zwei Probleme gleichzeitig angehen, die derzeit von den Entwicklern der Plugins zum Einfügen von Snippets und zum Anpassen von Klammern separat gelöst werden Lösen Sie diese Probleme erneut, zusätzlich zu ihren Lösungen, um Bequemlichkeit und Magie zu erreichen.
Es kommt auf die Kontrolle gegen die Bequemlichkeit an. Ich denke, die Steuerung wird Ihnen in diesem Fall bessere Dienste leisten. Das bedeutet, Sie sollten diese Probleme und die zugehörigen Plugins und Tastenzuordnungen voneinander trennen. Wenn Sie noch Bequemlichkeit wünschen, ist es machbar, aber es ist schwer.
)
, eine Neuzuordnungc-j
könnte funktionieren.