¿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 / ...?)


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.