vi treats dash -
and space
as word separators for commands such as dw
and cw
.
Is there a way to add underscore _
as well?
I quite often want to change part of a variable name containing underscores, such as changing src_branch
to dest_branch
. I end up counting characters and using s
(like 3sdest
), but it would be much easier to use cw
(like cwdest
).
In case you're using vim, you can change that by setting the iskeyword
option (:he iskeyword
). If that is not an option, you can always use ct_
instead of counting.
Is there a way to add underscore _
as well?
:set iskeyword-=_
One other good option in such cases is to use camelcasemotion plugin.
It adds new motions ,b
, ,e
, and ,w
, which work analogously with b
, e
, and w
, except that they recognize CamelCase and snake_case words. With it you can use
c,edest
and this will replace "src_branch" with "dest_branch" if your cursor was on first character of "src_branch".
You could type cf_dest_
and save the counting part.
Edit: or as suggested: ct_
changes text until right before the underline character. (I'm using the f
motion more, so it came more naturally to me)
Or you could redefine 'iskeyword'
(:help iskeyword
for details).
I was just looking at this myself and added this to my .vimrc:
set iskeyword=!-~,^*,^45,^124,^34,192-255,^_
My .vimrc had issues with ^| and ^", which was part of the default iskeyword for my setup, so I changed to their ascii values and it works fine. My main modification was to add "^_" to the end of the default setting to keep vim from seeing underscore as being part of a word.