Dans une langue (julia) qui a des blocs définis par des mots clés tels que for..end
, begin..end
ainsi que des parenthèses, quelle est la bonne façon de sauter un tel bloc? En outre, ce end
n'est pas seulement un mot-clé de bloc, mais aussi un identifiant valide utilisé dans d'autres endroits.
Une façon consiste à rechercher des expressions rationnelles de démarrage / fermeture de bloc et à ignorer toutes les chaînes, les commentaires et les end
s, etc., mais cela est quelque peu inefficace et un peu moche.
Existe-t-il un moyen de faire en sorte que l'analyse syntaxique d'emacs reconnaisse de tels mots clés de bloc, afin que forward/backward-sexp
cela fonctionne automatiquement et que l'on puisse rapidement identifier le début du bloc actuel à partir de la sortie de, par exemple syntax-ppss
?
[Remarque: cela ne me dérange pas d'analyser le fichier moi-même, mais dans ce cas, j'aimerais toujours savoir comment mon analyseur doit être connecté au reste d'emacs.]
ruby-mode
ce qui fait quelque chose de similaire pour le rubis. Une autre option est de se connecter aux smartparens , il a une configuration spéciale pour le mode rubis que vous pouvez utiliser comme point de départRéponses:
Vous pouvez jeter un œil à la bibliothèque intégrée SMIE (signifie Simple-Minded Indentation Engine). Malgré son nom, l'indentation n'est qu'une des fonctionnalités qu'il offre. C'est la méthode utilisée par de nombreux modes (y compris
ruby-mode
, mentionnés dans un commentaire), pour fournir le mouvement sexp et l'indentation.Le déploiement de SMIE pour une langue est en gros une tâche en deux étapes:
Pour votre objectif, seule la première étape sera nécessaire!
Dans l'ensemble, l'analyseur défini de cette façon se branche bien dans emacs. Par exemple,
show-parens
mettra en évidence les expressions de type paren définies dans la grammaire SMIE (au moins dans les versions assez récentes d'emacs).Notez que vous ne pourrez toujours pas utiliser
syntax-ppss
pour obtenir des informations sur l'environnement englobant, car il ne vous donnera que le résultat de l'analyseur de table de syntaxe. Mais les fonctions de mouvement sexp (par exempleup-list
suivies debackward-sexp
) peuvent être un remplacement.la source
J'ai fait une bibliothèque pour ça
Une fois défini, un tas de commandes sont disponibles, avancer, reculer, copier, etc.
Définition --en pseudo-code--:
Une fois terminé, il devrait être disponible, c'est-à-dire copié et retourné comme ceci
la source