Ich habe eine Stunde lang vim-Skriptbeiträge gelesen, aber ich fürchte, ich habe nicht die Fähigkeiten, diese Beiträge auf mein Problem anzuwenden. Beim Bearbeiten von Mathematik in Latexdokumenten möchte ich häufig mathematische Symbole wie +, -, = durch \ Pad {+}, \ Pad {-}, \ Pad {=} ersetzen, wobei \ Pad ein Latexmakro I 'ist. ve definiert, um Platz um das Symbol zu setzen. Ich möchte meinen Cursor auf ein solches Symbol setzen, ein paar Buchstaben eingeben, sagen ;P
und diese Aktion das Symbol durch ersetzen lassen
\Pad{whatever the symbol under the cursor is}
Jede Hilfe wäre sehr dankbar!
`
for
Schleife und dem:execute
Befehl definieren. Ein Beispiel finden Sie hier: github.com/romainl/dotvim/blob/master/vimrc#L307-L312 Es sollte nicht schwierig sein, dasselbe für Ihre Zuordnungen zu tun. Ich weiß jedoch nicht, wie ich "pad", "ppad", ... als Argument an die Funktion übergeben soll. Ich habe eine Idee (nach dem Lesen:h g@
scheint es, dass Sie eine optionale Gruppe von Argumenten hinzufügen...
und mit auf das erste Argument dieser Gruppe zugreifen könnena:1
), aber es ist mir nicht gelungen, eine funktionierende Funktion zu schreiben. Wenn ich kann, werde ich es dich wissen lassen.PadMacro
ist nicht zu irreführend, weil es nur eine Vimscript-Funktion ist. Ich habe es so genannt, weil Sie sagten, es\Pad{}
wurde als Latexmakro interpretiert. Aber wenn Sie es vorziehen, können Sie es auch anders nennen (PadEnclosure
zum Beispiel). Für die Zuordnungen, sagen wir , Sie drei Funktionen habenMyFunctionA
,MyFunctionB
undMyFunctionC
, die jeweils eine bestimmte Transformation auf Ihren Text anwenden. Und Sie möchten sie zuordnen;Pa
,;Pb
und;Pc
. Dann sollte der folgende Code dies für Sie tun können: paste.debian.net/plain/356949 Nicht getestet, daher bin ich mir nicht sicher, ob es funktioniert.\let string =
so zu ändern , dass sie ein Listenelement anstelle eines Pads akzeptiert. Der Problemteil besteht darin, den Makronamen als Listenelement anstelle einer Literalzeichenfolge zu definieren, dh das Folgende funktioniert nicht (nicht überraschend)function! s: . func_name . (type) abort
. Vielleicht gibt es eine Möglichkeit, die Funktion mit einem generischen Namen zu erstellen und dann innerhalb der Schleife die generische Funktion nach func_name zu kopieren?Die Idee ist einfach:
Für Ihr Beispiel würden Sie tun:
Welches kann für Ihre Bequemlichkeit abgebildet werden:
Beachten Sie, dass es möglich ist, ein anderes Register zu verwenden, wenn Sie das unbenannte Register nicht überladen möchten. Hier benutze ich das
z
Register:quelle
Nur noch eine Lösung für den Fall, dass Surround nicht nur ein Symbol enthält (Beispiel aus meiner Konfiguration für Surround mit "[" & "]"
Der Schlüssel ist, "o" & "O" zu verwenden, um zum Anfang / Ende der Auswahl zu gelangen
quelle