Die Dokumentzeichenfolge für modify-syntax-entry
lautet wie folgt:
(modify-syntax-entry CHAR NEWENTRY &optional SYNTAX-TABLE)
...
The first character of NEWENTRY should be one of the following:
...
/ character-quote. @ inherit from parent table.
| generic string fence. ! generic comment fence.
Was ist ein Zaun und wann würde ich einen verwenden? Ich kann nichts im Info-Handbuch finden.
syntax-highlighting
syntax-table
Wilfred Hughes
quelle
quelle
M-x report-emacs-bug
."
kann a nur von einem anderen beendet werden"
. Wenn jedoch eine benutzerdefiniertesyntax-propertize
Funktion zum Erkennen einer Zeichenfolge verwendet wird, ist dies nicht möglich. Stattdessen können Sie die Endpunkte von Zeichenfolgen und Kommentaren mit|
bzw. markieren!
. (Die Dokumentation besagt, dass diese Syntaxklassen hauptsächlich verwendet werden sollten, wenn diesyntax-table
syntax-propertize
Antworten:
Sie sind im Handbuch dokumentiert, es wird jedoch nicht das Wort „Zaun“ verwendet. Die Zeichen
!
und|
werden als „generische Kommentarbegrenzer“ und „generische String - Trennzeichen“ in der angegebenen Syntax Klassenreferenz .Diese Zeichen wurden in Emacs 20.1 eingeführt. Zitieren der NEWS-Datei:
Ich kann
!
in den Standard-Emacs-Modi keine Verwendung finden . Es gibt verschiedene Verwendungszwecke von|
. Der beabsichtigte Anwendungsfall sind Sprachen mit Literalen, die andere Trennzeichen als die üblichen Zeichenfolgenbegrenzer verwenden. Diese werden normalerweise über Überlagerungen festgelegt, die durch Schriftsperren basierend auf dem Kontext hinzugefügt werden. Zum Beispiel in Perl kann ein regulärer Ausdruck geschrieben werden/REGEXP/
, oderm/REGEXP/
oderm~REGEXP~
oderm[REGEXP]
oder ein beliebige Anzahl von Variationen. Eine Zeichenkette kann geschrieben werden ,'STRING'
sondern auchq'STRING'
,q~STRING~
,q[STRING]
usw. Wenn Schriftsperre solche Konstrukte erkennt, setzt sie die Anführungszeichen (/
//
oder'
/'
oder~
/~
oder[
/]
in den Beispielen, die ich gegeben habe) zur generischen String-Trennzeichen-Syntax. Selbst wenn ein gewöhnlicher Zeichenfolgenbegrenzer vorhanden ist (z. B.q[foo"bar]
), wird dieser Begrenzer als gewöhnlicher Teil der Zeichenfolge betrachtet und die Zeichenfolge nicht beendet.Ich gebe zu, dass ich keinen definitiven Vorteil sehe - zum Beispiel macht der CPerl-Modus einige sehr ausgefallene Dinge und nutzt diese Funktion nicht.
quelle
!
zum Hervorheben von=begin
...=end
Blöcken.Entnommen aus syntax.h:
Unter der Annahme, dass sich die Syntaxcodes und die Regex-Syntaxklassen auf dasselbe beziehen, habe ich eine Verwendung entdeckt,
|
beicc-awk.el
der"\\s|"
unausgeglichene Zeichenfolgenbegrenzer verwendet werden.quelle
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
und andere . Ich sehe jedoch nicht, wie es sich vonSstring
hier unterscheidet .