¿Cómo hacer que los movimientos respeten camelCase o snake_case?

20

Es común usar camelCase o snake_case para separar varias palabras que forman un identificador. Sería bueno si los movimientos "palabra" ( b, w, e) detectarían los límites del centro de la identifier.

¿Cómo se puede lograr este comportamiento? (Plugin / vimrc / ...?)

Jaspe
fuente
1
También me gustaría saber esto parasnake_case
Martin Tournoij
Es posible que pueda hacer algo con la iskeywordconfiguración, pero me temo que esto tendrá muchos efectos secundarios adicionales ... (ver :help word).
Martin Tournoij
@Carpetsmoker, pensé que funcionaba snake_case. Parece que no, incluido en la pregunta.
Jasper
44
VimWiki lo tiene cubierto: vim.wikia.com/wiki/Moving_through_camel_case_words Escribiré una respuesta adecuada en algún momento si alguien más no me gana.
Rico
Personalmente, veo una palabra camalCased como una palabra completa y no me gusta la idea de dividirla a la mitad en una palabra debido a mayúsculas o minúsculas. Por lo general, uso las teclas fy tpara administrar los movimientos de palabras internas.
Sukima

Respuestas:

11

El complemento CamelCaseMotion hace lo que quieres. Por defecto se asigna a las teclas ,w, ,b, ,eque son equivalentes a la normalidad w, b, e. Funciona tanto para CamelCase como para snake_case:

Ejemplo:

camelCaseWord

El uso d,weliminará camel; usarlo nuevamente lo eliminará Case.

O con estuche de serpiente:

snake_case_word

d,weliminará snake_, y en la segunda vez se eliminará case_.

Los movimientos "internos" (como diw) también deberían funcionar como se espera (como di,w).

Si lo prefiere, también se puede reemplazar el valor predeterminado w, by econ:

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie
Jarlax
fuente
2
Tenga en cuenta que las asignaciones predeterminadas de este complemento sombrean el ,comando (repetir último f/ t/ F/ Tmovimiento), lo que significa que si desea usar ese comando, tendrá que esperar un retraso (configurado por 'timeoutlen'). Afortunadamente, el complemento le permite utilizar asignaciones alternativas de su elección.
tommcdo
Parece que hay algunos efectos secundarios con este complemento, es decir: dwencendido , key);cuando el cursor está en kparece eliminar toda la línea (incluida la nueva línea), mientras esperaba que solo keyfuera eliminado ...
Martin Tournoij
1
Encontré este complemento para ser mejor. La combinación de movimiento con eliminación funciona correctamente y también se detiene entre paréntesis.
Paschalis
Punto menor, pero en el primer ejemplo seguramente eliminaría camely luego Case, Word¿ no ?
preferred_anon