Customising word separators in vi

Viewed 13778

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).

6 Answers

Is there a way to add underscore _ as well?

:set iskeyword-=_ 

What is, and is not a member character to keywords depends on the language. For help on iskeyword use :help iskeyword.

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.

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.

To delete to the next underscore enter "df_" To change to the next underscore enter "cf_" NOTE: don't include the double quotes.

Related