La docstring pour modify-syntax-entry
dit ce qui suit:
(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.
Qu'est-ce qu'une clôture et quand devrais-je en utiliser une? Je ne trouve rien dans le manuel d'informations.
syntax-highlighting
syntax-table
Wilfred Hughes
la source
la source
M-x report-emacs-bug
."
ne peut être résilié que par un autre"
. Cependant, lorsqu'unesyntax-propertize
fonction personnalisée est utilisée pour reconnaître une chaîne, cela n'est pas possible. Au lieu de cela, vous pouvez marquer les points finaux des chaînes et des commentaires à l'aide de|
et!
, respectivement. (La documentation indique que ces classes de syntaxe doivent principalement être utilisées lors de l'utilisation de lasyntax-table
propriété text, ce quesyntax-propertize
définit une fonction personnalisée .)Réponses:
Ils sont documentés dans le manuel, mais il n'utilise pas le mot «clôture». Les caractères
!
et|
sont répertoriés comme «délimiteurs de commentaires génériques» et «délimiteurs de chaînes génériques» dans la référence de classe de syntaxe .Ces personnages ont été introduits dans Emacs 20.1. Citant le fichier NEWS:
Je ne trouve aucune utilisation de
!
dans les modes Emacs standard. Il existe plusieurs utilisations de|
. Le cas d'utilisation prévu est les langues qui ont des littéraux qui utilisent des délimiteurs autres que les délimiteurs de chaîne habituels, généralement définis via des superpositions ajoutées par un verrouillage de police en fonction du contexte. Par exemple, en perl, une correspondance d'expression régulière peut être écrite/REGEXP/
, oum/REGEXP/
oum~REGEXP~
oum[REGEXP]
ou n'importe quel nombre de variations. Une chaîne peut être écrit'STRING'
mais aussiq'STRING'
,q~STRING~
,q[STRING]
, etc. Lorsque le verrouillage de la police reconnaît de telles constructions, il définit les guillemets (/
//
ou'
/'
ou~
/~
ou[
/]
dans les exemples que j'ai donnés) à la syntaxe générique du délimiteur de chaîne. Même si un délimiteur de chaîne habituel est présent (par exempleq[foo"bar]
), ce délimiteur sera considéré comme une partie ordinaire de la chaîne, il ne terminera pas la chaîne.J'avoue que je ne vois aucun avantage définitif - par exemple, le mode CPerl fait des choses très sophistiquées et n'utilise pas cette fonction.
la source
!
pour mettre en évidence=begin
... les=end
blocs.Tiré de syntax.h:
En supposant que les codes de syntaxe et les classes de syntaxe regex se réfèrent à la même chose, j'ai repéré une utilisation
|
danscc-awk.el
laquelle des utilisations"\\s|"
pour mettre en évidence des délimiteurs de chaîne asymétriques.la source
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
et d' autres .Sstring
Mais je ne vois pas en quoi cela diffère d' ici.