Of modern shells, I prefer zsh over fish because it supports POSIX standards which make it possible to do stuff like copy & paste export VARNME=value. In virtually every other way, fish is awesome.

  bindkey -e
  bindkey '^[[1;9C' forward-word
  bindkey '^[[1;9D' backward-word

Set up the keybindings to emit the correct escape sequence: