diff --git a/config/emacs/modules/evil.el b/config/emacs/modules/evil.el new file mode 100644 index 0000000..9999224 --- /dev/null +++ b/config/emacs/modules/evil.el @@ -0,0 +1,44 @@ +;;; evil.el --- Minimal Evil -*- lexical-binding: t; -*- +;;; Commentary: +;; Evil for text editing and navigation only, with Evil's own defaults for +;; special buffers. Exceptions: dired (hjkl) and Magit (modules/git.el). +;; evil-collection is not used. +;;; Code: + +(use-package evil + :init + (setq evil-want-C-u-scroll t + evil-undo-system 'undo-redo) + :config + (evil-mode 1) + + ;; Literal tab in insert state. + (evil-define-key 'insert 'global + (kbd "TAB") #'self-insert-command + (kbd "C-SPC") #'completion-at-point) + + ;; project.el finders, dired-jump. + (evil-define-key '(normal motion) 'global + (kbd "C-e") #'dired-jump + (kbd "C-p") #'project-find-file + (kbd "C-f") #'project-find-regexp) + + ;; eglot code navigation. + (evil-define-key '(normal motion) 'global + "gd" #'xref-find-definitions + "gD" #'xref-find-references + "K" #'eldoc + (kbd "C-t") #'xref-go-back) + + (evil-set-initial-state 'dired-mode 'motion)) + +;; Dired: hjkl. j/k are Evil's line motions; h goes up a directory, +;; l opens the file or directory at point. +(with-eval-after-load 'dired + (evil-define-key 'motion dired-mode-map + "h" #'dired-up-directory + "l" #'dired-find-file + "." #'dired-omit-mode + (kbd "RET") #'dired-find-file)) + +;;; evil.el ends here