Najprostsze obejście: użyj, ciW
aby wybrać słowo rozdzielone spacjami.
Większy problem dotyczy wartości _
znaku w tabeli składni . Problem polega na tym _
, że domyślnie jest on składnikiem symbolu w tabeli składni i chcesz go traktować jako składnik słowa.
Jeśli używasz emacsa 24.4, możesz spróbować włączyć superword-mode
. Nie próbowałem tego sam, więc twój przebieg może się różnić.
Alternatywą jest po prostu samodzielna modyfikacja tabeli składni i poinformowanie Emacsa, że ma traktować _
znak jako składnik słowa, tak jak poniżej:
(modify-syntax-entry ?_ "w")
Po wykonaniu tej czynności ciw
działa tak, jak chcesz, tak, że wybierze wszystko abc_def_ghi
zamiast tylko def
.
Jednak robienie tego w ten sposób może być przesadą, szczególnie jeśli chcesz, _
aby liczyć się tylko jako część słowa dla obiektu tekstowego. Zamiast tego możesz doradzić evil-inner-word
w następujący sposób:
(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)))
Teraz _
jest nadal składnikiem symbolu dla wszystkiego oprócz obiektu tekstowego z wewnętrznym słowem, więc ciw
zrobi dokładnie to, co chcesz, bez dotykania funkcjonalności czegokolwiek innego.
Możesz przeczytać więcej o modyfikowaniu tabel składniowych w węźle EmacsWiki .
w
,aw
etc.), można zrobić to samo z następujących funkcji TOO:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Uwaga: musisz zmienićunderscore-as-word
na różne, unikalne (arbitralne) wartości.(modify-syntax-entry ?_ "w")
z jakiegoś powodu nie działało dla mnie. Robienie tego interaktywnie też nie działało. Masz pomysł, dlaczego lub jak mogę to debugować? Jestem na Spacemacs, na wypadek, gdyby było to istotne.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
, a potem zadziałało.superword-mode
nie wpływa na ruch wevil-mode
. Nie jest to więc element modyfikujący tabele składniowe.Poniższy fragment sprawi, że Zło będzie traktować symbol Emacsa jak słowo.
Ma to tę zaletę, że zmienia się w zależności od języka:
jest jednym symbolem w,
lisp-mode
ale dwoma symbolami (oddzielonymi przez-
) wc-mode
.źródło
W spacemacs FAQ proponuje następujące rozwiązania specyficzne dla języka:
Działa również w regularnych emacach. Ze złem na, to działa na wszystkich poleceń związanych słowo-(
w
,e
,*
,#
, etc)Mówiąc bardziej ogólnie, zrobi to dla wszystkich głównych trybów:
źródło
'prog-mode-hook
opcji obejmującej każdy język?Wprowadzono Emacsa 24
superword-mode
, mniejszy tryb, który traktuje podkreślenia jako część słów.evil-mode
szanuje to ustawienie.Oto dokumentacja:
źródło
evil-mode
, niestety jest błąd, kiedysuperword-mode
jest włączony. Powoduje pewne nieprawidłowe zachowanie, gdyevil-forward-word-begin
jest nazywany: github.com/emacs-evil/evil/issues/721Właściwie to bardzo podoba mi się to zachowanie, ponieważ mógłbym chcieć po prostu edytować część słowa i zachować pozostałe części nienaruszone. Jeśli chcę przejrzeć całe słowo, zawsze mogę użyć
E
,W
lubB
, wielkich wariantów. To daje mi bardziej szczegółową kontrolę.źródło