Solution de contournement la plus simple: permet ciW
de sélectionner un mot délimité par des espaces.
Le problème le plus important concerne la valeur du _
caractère dans la table de syntaxe . Le problème est qu’il _
s’agit par défaut d’un constituant de symbole dans la table de syntaxe et que vous souhaitez le traiter comme un constituant de mot.
Si vous utilisez emacs 24.4, vous pouvez essayer de l'activer superword-mode
. Je n'ai pas essayé moi-même, donc votre kilométrage peut varier.
Une alternative consiste simplement à modifier vous-même la table de syntaxe et à indiquer à Emacs que vous souhaitez que le _
caractère soit considéré comme un mot constituant, comme suit:
(modify-syntax-entry ?_ "w")
Une fois que vous avez fait cela, ciw
fonctionne comme vous le souhaitez, de sorte qu'il sélectionne tout abc_def_ghi
plutôt que juste def
.
Faire cela de cette manière peut toutefois être exagéré, surtout si vous voulez seulement que cela _
compte dans le mot pour l’objet texte. Au lieu de cela, vous pouvez conseiller evil-inner-word
comme suit:
(defadvice evil-inner-word (around underscore-as-word activate)
(let ((table (copy-syntax-table (syntax-table))))
(modify-syntax-entry ?_ "w" table)
(with-syntax-table table
ad-do-it)))
Maintenant, _
reste un symbole constitutif de tout sauf de l'objet texte de mot intérieur, donc ciw
fera exactement ce que vous voulez sans toucher à la fonctionnalité de quoi que ce soit d'autre.
Vous pouvez en savoir plus sur la modification des tables de syntaxe sur le nœud EmacsWiki .
w
,aw
, etc.), vous pouvez faire la même chose avec les fonctions suivantes aussi:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Remarque: vous devez modifierunderscore-as-word
différentes valeurs uniques (arbitraires).(modify-syntax-entry ?_ "w")
n'a pas fonctionné pour moi pour une raison quelconque. Le faire de manière interactive n'a pas fonctionné non plus. Une idée pourquoi ou comment je peux déboguer ceci? Je suis sur Spacemacs au cas où cela serait pertinent.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
, alors cela a fonctionné.superword-mode
n'affecte pas le mouvement dansevil-mode
. Ce n'est donc pas un élément constitutif de la modification des tables de syntaxe.L'extrait suivant fera en sorte que Mal traite un symbole Emacs comme un mot.
Cela a l'avantage de changer en fonction de la langue:
est un symbole
lisp-mode
mais deux symboles (séparés par-
) dansc-mode
.la source
La FAQ de spacemacs offre la solution suivante spécifique à la langue:
Cela fonctionne également dans les Emacs ordinaires. Avec le mal sur, il fonctionne avec toutes les commandes liées à mot (
w
,e
,*
,#
, etc.)Plus généralement, cela le fera pour tous les principaux modes:
la source
'prog-mode-hook
une option pour couvrir toutes les langues?Emacs 24 a introduit
superword-mode
, un mode mineur qui traite les soulignements comme des mots.evil-mode
respecte ce paramètre.Voici la documentation:
la source
evil-mode
, malheureusement, il y a un bug quandsuperword-mode
est activé. Cela provoque un comportement erratique quandevil-forward-word-begin
on l'appelle: github.com/emacs-evil/evil/issues/721En fait, j'aime assez ce comportement car je pourrais vouloir simplement éditer une partie du mot et garder les autres parties intactes. Si je veux reprendre tout le mot, je peux toujours utiliser
E
,W
ouB
les variantes majuscules. Cela me donne un contrôle plus fin.la source