Having spent at least an hour over the past couple days figuring out how to do this, I thought it would be worth putting up a clear explanation for future googlers of said question. It’s currently possible to find out how to do this via google, but the answer is at the bottom of a thread on a GitHub issue and I feel like it would be nice for the top result to just straight up ask and answer the question.
For each mode specified in
evil-collection-mode-list, evil-collection adds a
with-eval-after-load call to bind the vim-like keys you love so much for that mode. The way
with-eval-after-load works, perhaps unsurprisingly, is it runs code to define those keybindings after you open a buffer which has a mode included in evil-collection’s mode list. Which means any keys you define for that mode inside your config file will get overriden by keys defined by evil-collection.
Fortunately evil-collection provides a hook that we can piggy-back on to define our own bindings after evil-collection defines its bindings. The hook is called
evil-collection-setup-hook, and can be used like this, for instance, to add a binding to prodigy-view-mode:
(defun my-prodigy-view-mode-keys (&rest a) (evil-define-key 'normal prodigy-view-mode-map (kbd "q") 'quit-window)) (add-hook 'evil-collection-setup-hook 'my-prodigy-view-mode-keys)
And if you are using use-package, you can take advantage of some nice syntactic sugar, like this
(use-package prodigy :hook (evil-collection-setup . (lambda (&rest a) (evil-define-key 'normal prodigy-view-mode-map (kbd "q") 'quit-window))) ;; other config )