Comment faire pour que les mouvements respectent camelCase ou snake_case?

20

Il est courant d'utiliser camelCase ou snake_case pour séparer plusieurs mots qui forment un identifiant. Ce serait bien si les mouvements « mot » ( b, w, e) détecteraient les limites intérieure identifiant.

Comment réaliser ce comportement? (Plugin / vimrc / ...?)

Jaspe
la source
1
J'aimerais aussi le savoir poursnake_case
Martin Tournoij
Vous pouvez peut-être faire quelque chose avec le iskeywordparamètre, mais je crains que cela n'ait de nombreux effets secondaires supplémentaires ... (voir :help word).
Martin Tournoij
@Carpetsmoker Je pensais que cela fonctionnait snake_case. Semble que ce n'est pas le cas, l'a inclus dans la question.
Jasper
4
VimWiki vous couvre: vim.wikia.com/wiki/Moving_through_camel_case_words Je rédigerai une bonne réponse à un moment donné si quelqu'un ne me bat pas.
Rich
Personnellement, je considère un mot camalCased comme un mot entier et je n'aime pas l'idée de le diviser à moitié en raison de la casse ou du soulignement. Habituellement, j'utilise les touches fet tpour gérer les mouvements internes des mots.
Sukima

Réponses:

11

Le plugin CamelCaseMotion fait ce que vous voulez. Par défaut , il mappe les touches ,w, ,b, ,equi sont équivalentes à la normale w, b, e. Cela fonctionne pour CamelCase et snake_case:

Exemple:

camelCaseWord

L'utilisation d,wsupprimera camel; l'utiliser à nouveau supprimera Case.

Ou avec étui à serpent:

snake_case_word

d,wsupprimera snake_, et la deuxième fois, il sera supprimé case_.

Les mouvements "intérieurs" (comme diw) devraient également fonctionner comme prévu (comme di,w).

Si vous préférez, vous pouvez également remplacer la valeur par défaut w, bet eavec:

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
la source
2
Notez que les mappages par défaut de ce plugin masquent la ,commande (répéter dernier f/ t/ F/ Tmouvement), ce qui signifie que si vous souhaitez utiliser cette commande, vous devrez attendre un délai (configuré par 'timeoutlen'). Heureusement, le plugin vous permet d'utiliser des mappages alternatifs de votre choix.
tommcdo
Il semble y avoir des effets secondaires avec ce plug - in, à savoir: dwsur , key);lorsque le curseur est à ksemble enlever toute la ligne (y compris saut de ligne), alors que je pensais juste keyà enlever ...
Martin Tournoij
1
J'ai trouvé que ce plugin était meilleur. La combinaison du mouvement avec la suppression fonctionne correctement et elle s'arrête également aux crochets.
Paschalis
Point mineur, mais dans le premier exemple, cela supprimerait sûrement camelet ensuite Case, non Word?
Preferred_anon