The simplest workaround: use
ciW to select a whitespace-delimited word.
The bigger issue has to do with the value of the
_ character in the syntax table. The issue is that
_ is, by default, a symbol constituent in the syntax table, and you want to treat it as a word constituent.
If you're using emacs 24.4, you could try enabling
superword-mode. I haven't tried it myself, so your mileage may vary.
An alternative is simply to modify the syntax table yourself and tell Emacs you want it to treat the
_ character as a word constituent, like so:
(modify-syntax-entry ?_ "w")
After you do that,
ciw works as you want it to, such that it will select all of
abc_def_ghi rather than just
Doing it this way, however, may be overkill, especially if you only want the
_ to count as part of the word for the text object. Instead, you can advise
evil-inner-word as follows:
(defadvice evil-inner-word (around underscore-as-word activate)
(let ((table (copy-syntax-table (syntax-table))))
(modify-syntax-entry ?_ "w" table)
_ is still a symbol constituent for everything except for the inner-word text object, so
ciw will do precisely what you want without touching the functionality of anything else.
You can read more about modifying syntax tables on the EmacsWiki node.