Gibt es eine Möglichkeit, den Typ der umgebenden Klammer (dh '(', '[' oder '{') um den Punkt herum herauszufinden? Zum Beispiel (Verwenden |
, um einen Punkt darzustellen)
{ abc, | df }
sollte '{' zurückgeben, und
{ abc[ | ], 123 }
sollte '[' zurückgeben. Idealerweise möchte ich, dass es auch Anführungszeichen behandelt.
Für den Fall, dass jemand neugierig ist oder weitere Details benötigt: Mein Ziel ist es, :
mithilfe von elektrischen Abständen (auch als Smart-Operator bezeichnet ) einen intelligenten automatischen Abstand in Python einzurichten . Das Problem ist, dass normalerweise (in Python) :
entweder der Slice-Operator oder der Beginn einer for / if / ... -Anweisung ist, die nicht von Leerzeichen umgeben sein sollte. Innerhalb eines Wörterbuchs ist es jedoch so etwas wie ein Zuweisungsoperator und sollte daher von Leerzeichen umgeben sein. Ich muss also überprüfen, ob sich der Punkt innerhalb eines Diktats befindet (dh innerhalb {}
), aber nicht innerhalb einer Slice-Operation oder einer Zeichenfolge innerhalb dieses Dikts (dh nicht innerhalb []
oder ""
).
Bearbeiten:
Hier ist die Hilfsfunktion, die ich basierend auf der Antwort von abo-abo geschrieben habe:
(defun enclosing-paren ()
"Return the closing parenthesis of the enclosing parens, or nil if not inside any parens."
(ignore-errors
(save-excursion
(up-list)
(char-before))))
Dann ist das letzte Prädikat:
(and (not (in-string-p))
(eq (enclosing-paren) ?\}))
Bearbeiten 2:
Die obige Funktion erwies sich als zu langsam (sie verursachte häufig eine merkliche Verzögerung, wenn a :
eingegeben wurde). Ich verwende jetzt stattdessen Stefans Antwort, die viel schneller zu sein scheint.
""
können Sie die integrierte Funktion verwendenin-string-p
.