ct_ will change up to the underscore and leave it be.
cf_ will change up to the underscore and eat it as well.
Alternatively, you can use
set iskeyword-=_ which will make the “_” character a valid word boundary. This might be preferable if you, like me, tend to use
ciw more often than just
iskeyword is how the syntax highlighting is managed, you’ll probably notice that for methods/functions that contain keywords the highlighting is strange after playing with this. I found that I like
nnoremap <leader>e :set iskeyword-=_<cr>diw:set iskeyword+=_<cr>i as a way to allow me to more easily edit the words I want without messing with the highlighting.