Not being satisfied with side-effects of `evil-symbol-word-search` or having to apply `(modify-syntax-entry)` explicitly to every mode, I found that apparently minor mode hooks are run after major mode syntax table is created. That means you can add a hook to modify syntax table to `evil-mode` hook and it should just work.

```lisp
(defun myhook-evil-mode ()
  (unless (or (eq major-mode 'special-mode) (minibufferp))
    ;; make underscore part of a word
    (modify-syntax-entry ?_ "w")))
(add-hook 'evil-local-mode-hook 'myhook-evil-mode)
```

Maybe not optimal as it's executed every time a new buffer is created, but shouldn't matter in this case. What does though is that this allowed me [to get rid of a humongous 49 lines table](https://github.com/Hi-Angel/dotfiles/commit/4620b4d11afcef2fc22133c9573d0eb712f7bcc9#diff-ae51cdd59e3f8b0b021370d52c4d2651c0f0d5cf2ef163b8c81879251c26c277L298-L346) that was modifying syntax table of every possible mode I got to work with.