Самый простой обходной путь: используйте ciW
для выбора слова, разделенного пробелом.
Большая проблема связана со значением _
символа в таблице синтаксиса . Проблема заключается в том _
, что по умолчанию это символ, составляющий символ в таблице синтаксиса, и вы хотите рассматривать его как компонент слова.
Если вы используете emacs 24.4, вы можете попробовать включить superword-mode
. Я сам не пробовал, поэтому ваш пробег может отличаться.
Альтернатива - просто изменить таблицу синтаксиса самостоятельно и сообщить Emacs, что вы хотите, чтобы она воспринимала _
символ как составляющую слова, например:
(modify-syntax-entry ?_ "w")
После того, ciw
как вы это сделаете, работает так, как вы хотите, чтобы он выбрал все, abc_def_ghi
а не только def
.
Однако это может быть излишним, особенно если вы хотите, _
чтобы значение считалось только частью слова для текстового объекта. Вместо этого вы можете посоветовать evil-inner-word
следующее:
(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)))
Теперь _
все еще является символом, составляющим все, кроме текстового объекта внутреннего слова, поэтому ciw
будет делать именно то, что вы хотите, не затрагивая функциональность чего-либо еще.
Вы можете прочитать больше об изменении таблиц синтаксиса на узле EmacsWiki .
w
,aw
и т.д.), вы можете сделать то же самое со следующими функциями тоже:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Примечание: вам нужно изменитьunderscore-as-word
на разные, уникальные (произвольные) значения.