Die einfachste Lösung: Verwenden ciW
Sie diese Option, um ein durch Leerzeichen getrenntes Wort auszuwählen.
Das größere Problem hat mit dem Wert des _
Zeichens in der Syntaxtabelle zu tun . Das Problem ist, dass _
es sich standardmäßig um einen Symbolbestandteil in der Syntaxtabelle handelt und Sie diesen als Wortbestandteil behandeln möchten.
Wenn Sie Emacs 24.4 verwenden, können Sie versuchen, es zu aktivieren superword-mode
. Ich habe es nicht selbst ausprobiert, daher kann Ihr Kilometerstand variieren.
Eine Alternative besteht einfach darin, die Syntaxtabelle selbst zu ändern und Emacs mitzuteilen, dass das _
Zeichen wie folgt als Wortbestandteil behandelt werden soll:
(modify-syntax-entry ?_ "w")
Nachdem Sie dies getan haben, ciw
funktioniert es so, wie Sie es möchten, sodass es nicht nur, abc_def_ghi
sondern alles auswählt def
.
Wenn Sie dies jedoch auf diese Weise tun, ist dies möglicherweise zu viel des Guten, insbesondere wenn Sie nur möchten _
, dass das Wort als Teil des Textobjekts gezählt wird. Stattdessen können Sie evil-inner-word
Folgendes raten :
(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)))
Ist jetzt _
immer noch ein Symbolbestandteil für alles außer für das Textobjekt mit dem inneren Wort, ciw
wird also genau das tun, was Sie wollen, ohne die Funktionalität von irgendetwas anderem zu berühren.
Weitere Informationen zum Ändern von Syntaxtabellen finden Sie im EmacsWiki-Knoten .
w
,aw
usw.), können Sie das gleiche mit den folgenden Funktionen auch tun:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Hinweis: Sie müssenunderscore-as-word
in verschiedene, eindeutige (willkürliche) Werte wechseln .(modify-syntax-entry ?_ "w")
hat aus irgendeinem Grund nicht für mich gearbeitet. Es interaktiv zu machen hat auch nicht funktioniert. Irgendeine Idee warum oder wie ich das debuggen kann? Ich bin auf Spacemacs, falls das relevant ist.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
dann geklappt.superword-mode
beeinflusst nicht die Bewegung inevil-mode
. Das Ändern von Syntaxtabellen ist also kein Bestandteil.Das folgende Snippet lässt Evil ein Emacs- Symbol als Wort behandeln.
Dies hat den Vorteil, dass es sich je nach Sprache ändert:
ist ein Symbol in,
lisp-mode
aber zwei Symbole (getrennt durch-
) inc-mode
.quelle
Die FAQ zu spacemacs bietet die folgende sprachspezifische Lösung:
Es funktioniert auch in normalen Emacs. Mit dem Bösen auf, es funktioniert mit allen Wortbezogenen Befehlen (
w
,e
,*
,#
usw.)Im Allgemeinen funktioniert dies für alle Hauptmodi:
quelle
'prog-mode-hook
eine Option verwendet, um jede Sprache abzudecken?Emacs 24 wurde eingeführt
superword-mode
, ein Nebenmodus, der Unterstriche als Teil von Wörtern behandelt.evil-mode
respektiert diese Einstellung.Hier ist die Dokumentation:
quelle
evil-mode
, gibt es leider einen Fehler, wennsuperword-mode
aktiviert ist. Es verursacht ein unberechenbares Verhalten, wenn github.com/emacs-evil/evil/issues/721evil-forward-word-begin
Eigentlich mag ich dieses Verhalten sehr, da ich vielleicht nur einen Teil des Wortes bearbeiten und die anderen Teile intakt halten möchte. Wenn ich das ganze Wort übergehen will , kann ich immer gebrauchen
E
,W
oderB
Varianten der Groß. Dies gibt mir eine feinkörnigere Kontrolle.quelle