F: Wie kann ich die smartparens
Entscheidungsregeln für das Einfügen eines gepaarten oder einzelnen Zeichens anpassen?
smartparens
scheint beim Einfügen von einfachen Anführungszeichen (z. B. in oder ) meistens klug zu sein . Daher wird standardmäßig ein Paar von s eingefügt und der Cursor dazwischen platziert, aber wenn es am Ende eines Wortes aufgerufen wird, wird nur ein einzelnes
in Erwartung von Kontraktionen eingefügt. Also zB:text-mode
org-mode
'
'
'
=>'*'
(wo*
ist Punkt)can + '
=>can'*
(damit ich weiter schreiben kann "kann nicht")
Es gibt jedoch einen Schluckauf, den ich beheben möchte. Ich verwende oft Abkürzungen, die in einem Punkt enden, möchte sie aber besitzergreifend machen. Zum Beispiel könnte ich "so" als Abkürzung für "jemand" schreiben, und daher wäre "so" "jemandes". Das Problem ist, dass nach einem Punkt smartparens
ein Paired eingefügt '
wird:
- was ich will:
s.o. + '
=>s.o.'*
- was ich bekomme:
s.o. + '
=>s.o.'*'
Mein spezifischer Streitpunkt ist smartparens
das Verhalten von '
, aber ich kann mir vorstellen, dass dies auch bei anderen Charakteren ein allgemeineres Problem ist.
Also: Wie kann ich die smartparens
Entscheidungsregel optimieren , um den Zeichensatz zu erweitern, wonach nur noch ein einziger eingefügt wird '
?
PS: Amüsanterweise führt der Versuch, "Smartparens" in Emacs einzugeben, zu demselben irritierenden Verhalten.
quelle
my-sp-pair-function
scheint aber nicht die gewünschte Funktionalität zu bieten. Es gibt mir das gleiche Verhalten wie zuvor nach der Interpunktion (gepaarte Einfügung), aber jetzt führt es auch eine gepaarte Einfügung nach alphanumerischen Zeichen durch, wodurch die Kontraktionen gebrochen werden.(and (or (looking-at "[[:space:][:punct:]]") (sp-point-before-eol-p id action context)) (not (looking-back "[.`]")))
Sie können das Verhalten von smartparen mithilfe der Funktionen
sp-pair
und ändernsp-local-pair
. Das smartparens Wiki erklärt diese Funktionen ausführlich.Grundsätzlich können Sie Folgendes tun, um das Verhalten global anzupassen
ODER, um das Verhalten nur für einige Modi anzupassen
Wo
desired-mode
ist der Modus, für den Sie das Verhalten anpassen möchten, und welchemy-custom-predicate
Funktion sollten Smartparens verwenden, um zu bestimmen, ob das Paar automatisch eingefügt werden soll.Aus
sp-pair
der Dokumentzeichenfolge sollte das benutzerdefinierte Prädikat akzeptierenEine benutzerdefinierte Funktion, die
:unless
in Ihrem speziellen Fall als Prädikat verwendet werden kann, lautet also wie folgtBeachten Sie, dass ich nach dem regulären Ausdruck suche,
<punctuation>'
da der Punkt sein würde, an.'|
dem das Prädikat ausgeführt wird.Schließlich können Sie es in Smartparens einbinden, indem Sie dies tun
quelle
(defun predp () (sp--looking-back-p "[[:space:][:punct:]]"))
),smartparens
ignoriere sie jedoch alle.