Il existe un certain nombre de commandes dans Emacs qui s'appliquent aux «mots». Les exemples incluent forward-word
, kill-word
, upcase-word
, mark-word
, transpose-words
, etc. La définition de « mot » semble varier un peu entre les commandes. Par exemple, forward-word
s'arrêtera à un trait de soulignement dans un mot (par exemple foo_bar
) mais mark-word
ne s'arrêtera pas au trait de soulignement.
Est-il possible de changer la définition de "mot" lorsque je suis en mode prog pour qu'Emacs utilise les limites de mots appropriées pour la syntaxe de la langue actuelle?
Quand je suis que c-mode
je veux forward-word
sauter sur underscores, et quand je suis lisp-mode
je veux forward-word
sauter sur les deux traits d' union, etc. et underscores
la source
C-M-f
est lié àforward-sexp
et ne se comporte en rien comme ce que vous décrivez. Vous avez raison de dire que ce que je veux, c'est naviguer par symboles, mais je ne vois pas cette option.forward sexp
est essentiellement laforward-symbol
plupart du temps, avec la polyvalence supplémentaire de passer également en revue les accolades correspondantes. Tu devrais lui donner une chance.forward-sexp
dire qu'il s'agit d'une approximation proche deforward-symbol
. Pour commencer, il peut vous sauter de manière confuse sur des fonctions entières, vous faisant atterrir des centaines de lignes d'où vous avez commencé. Il saute également sur les listes d'arguments, etc. Et essayez ceci: étant donné le code lisp suivant,(global-set-key [remap list-buffers] 'ibuffer)
placez votre curseur au milieu du motremap
et exécutezforward-sexp
-le plusieurs fois. Il déclenche une erreur lorsqu'il atteint la fermeture]
. Non merci.superword-mode
peut-être votre gars.C-M-f
etC-M-t
agir sur les symboles (ils agissent sur sexps). Je vais modifier pour corriger cette impression. Mais vous pouvez certainement vous lierforward-symbol
à n'importe quelle touche que vous aimez, si vous la trouvez particulièrement utile. Il n'y en a pastranspose-symbols
, mais vous pouvez encore en écrire un, si vous pensez que c'est utile.Jetez un oeil à
superword-mode
etsubword-mode
. Superword traite les traits de soulignement comme faisant partie d'un mot au lieu d'une limite, ilfoo_bar
serait donc traité comme un seul mot .Subword fait le contraire, mais pour camelCase, il
fooBar
est donc traité comme deux mots au lieu d'un.Cela ressemble au comportement que vous souhaitez
cc-mode
utilisersuperword-mode
.Je recommanderais de lire la source car
subword-mode
, même si ces deux modes ne font pas exactement ce que vous voulez, ils devraient vous montrer comment changer le comportement de détection des mots.Discussion plus longue sur emacsredux et ergomacs .
la source
superword-mode
jeu agréable avecparedit
? Par exemple,paredit-forward-kill-word
ne supprime pas le mot entier (contenant des traits de soulignement) lorsquesuperword-mode
est activé.paredit
respecte cela, alors je pense qu'il fait ce qu'on lui demande.paredit-forward-kill-word
ne tue pas le même mot défini parsuperword-mode
.paredit-forward-kill-word
et on dirait qu'il fait sa propre analyse. Donc, vous pourriez peut-être échanger cela, mais probablement pas.Si j'ai compris votre question, vous pouvez modifier la table de syntaxe du langage, par exemple pour c ++:
(modify-syntax-entry ?_ "w" c++-mode-syntax-table)
M-x apropos
alors la recherche de table de syntaxe devrait aussi vous aider.la source