Xiaogang,
As Linus already noted, you propably forgot the `/g` flag. The g flag means global – each occurrence in the line is changed, rather than just the first.
I guess you got this, because you're accustomed to have the default setting for the 'gdefault' option on in your Vimrc configuration. Without the `gdefault` option, it requires that the g flag should be included in %s///g to perform a global substitute. I recommend to set your gdefault to be turned off, it creates confusion because then %s/// is global, whereas %s///g is not (that is, g reverses its meaning). Thus as expected, Evil is showing the correct behaviour of a Vim implementation.