La solución más simple: usar ciW
para seleccionar una palabra delimitada por espacios en blanco.
El problema más grande tiene que ver con el valor del _
personaje en la tabla de sintaxis . El problema es que _
, por defecto, es un componente de símbolo en la tabla de sintaxis, y desea tratarlo como un componente de palabra.
Si está utilizando emacs 24.4, puede intentar habilitarlo superword-mode
. No lo he probado yo mismo, por lo que su kilometraje puede variar.
Una alternativa es simplemente modificar la tabla de sintaxis usted mismo y decirle a Emacs que desea que trate el _
carácter como un componente de la palabra, así:
(modify-syntax-entry ?_ "w")
Después de hacer eso, ciw
funciona como lo desea, de modo que seleccionará todo en abc_def_ghi
lugar de solo def
.
Sin embargo, hacerlo de esta manera puede ser excesivo, especialmente si solo desea _
que cuente como parte de la palabra para el objeto de texto. En cambio, puede aconsejar evil-inner-word
lo siguiente:
(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)))
Ahora, _
sigue siendo un símbolo constituyente de todo, excepto del objeto de texto de la palabra interna, por ciw
lo que hará exactamente lo que desee sin tocar la funcionalidad de nada más.
Puede leer más sobre cómo modificar tablas de sintaxis en el nodo EmacsWiki .
w
,aw
, etc.), se puede hacer lo mismo con las siguientes funciones también:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Nota: debe cambiarunderscore-as-word
a valores diferentes, únicos (arbitrarios).(modify-syntax-entry ?_ "w")
no funcionó para mí por alguna razón. Hacerlo interactivamente tampoco funcionó. ¿Alguna idea de por qué o cómo puedo depurar esto? Estoy en Spacemacs en caso de que sea relevante.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
, luego funcionó.superword-mode
no afecta el movimiento enevil-mode
. Por lo tanto, no es un componente para modificar tablas de sintaxis.El siguiente fragmento hará que Evil trate un símbolo de Emacs como una palabra.
Esto tiene la ventaja de que cambia según el idioma:
es un símbolo en
lisp-mode
pero dos símbolos (separados por-
) enc-mode
.fuente
Las preguntas frecuentes de spacemacs ofrecen la siguiente solución específica del idioma:
También funciona en emacs regulares. Con el mal encendido, funciona con todos los comandos relacionados con la palabra-(
w
,e
,*
,#
, etc)De manera más general, esto lo hará para todos los modos principales:
fuente
'prog-mode-hook
una opción para cubrir todos los idiomas?Emacs 24 introdujo
superword-mode
, un modo menor que trata los guiones bajos como parte de las palabras.evil-mode
respeta esta configuración.Aquí está la documentación:
fuente
evil-mode
, desafortunadamente, hay un error cuandosuperword-mode
está habilitado. Causa un comportamiento errático cuandoevil-forward-word-begin
se llama: github.com/emacs-evil/evil/issues/721De hecho, me gusta bastante este comportamiento, ya que es posible que solo desee editar una parte de la palabra y mantener las otras partes intactas. Si quiero repasar toda la palabra, siempre puedo usar
E
,W
oB
las variantes en mayúscula. Esto me da más control de grano fino.fuente