Déplacement en Camel Case avec IdeaVim
Si comme moi, vous travaillez sur un langage dont la convention de nommage est le CamelCase et que vous utilisez les motions de Vim, vous avez peut-être également eu cette frustration de ne pas pouvoir sauter d’un “mot” à l’autre dans un nom de variable ou de classe.
L’alternative que j’ai utilisée pendant des mois est la suivante :
// Goal : Change "Foo" with "Bar" in a CamelCase word
<caret>SomeAwesomeFooService
// Place the caret at Foo : "fF" ou "/Foo<Enter>"
SomeAwesome<caret>FooService
// Change the Foo part : "ctS" and then type "Bar<Enter>
SomeAwesomeBarService
Cette méthode est assez efficace mais parfois juste frustrante de devoir indiquer spécifiquement les lettres majuscules dans les commandes. J’aimerais avoir une commande intuitive que l’on puisse taper avec le minimum de réflexion comme peuvent l’être les commandes w, b, e
.
Après quelques recherches, voici ce que j’ai pu réussir à mettre en place :
// Goal : change "Foo" with "Bar" in a CamelCase word
<caret>SomeAwesomeFooService
// Move the caret to the next "word" inside CamelCase : "<leader>w"
Some<caret>AwesomeFooService
// Again : "<leader>w"
// Of course, I could have used "2<leader>w" directly
SomeAwesome<caret>FooService
// Change the Foo part : "c<leader>w" and then type "Bar<Enter>"
SomeAwesomeBarService
Et voici comment le mettre en place avec quelques lignes de configurations dans le .ideavimrc
:
let mapleader = " "
"" Camelcase motion
" Can be used with dw, cw, yb, etc
noremap <leader>w [w
noremap <leader>e ]w
noremap <leader>b [b
Vous pouvez mettre la touche que vous voulez dans le mapleader
. Ce sera la touche représentée par <leader>
dans la suite du fichier.
Comme vous pouvez le voir, j’utilise la touche espace qui est facilement accessible depuis le pouce et me permet de taper la suite de la commande avec mes autres doigts.
A noter :
- https://youtrack.jetbrains.com/issue/VIM-1984/Support-CamelCaseMotionvim-plugin
- https://stackoverflow.com/questions/71631159/ideavim-move-between-words-in-camel-case-word