(defun wrap-with-doublequote (&optional arg) (interactive "P") (sp-wrap-with-pair "\"")) (defun wrap-in-dollar-brace (&optional arg) (interactive "P") (sp-wrap-with-pair "${")) (defun fwoar-delete-mru-window () (interactive) (delete-window (get-mru-window nil nil t))) (use-package undo-fu :ensure t) (use-package evil :ensure t :after undo-fu :init (setq evil-want-integration t) ;; This is optional since it's already set to t by default. (setq evil-want-keybinding nil) (setq evil-undo-system 'undo-fu) :config (evil-define-key 'motion 'global (kbd "TAB") nil) (evil-define-key 'motion 'global (kbd "C-w C-o") 'fwoar-delete-mru-window) (evil-define-key 'motion 'global (kbd "C-w C-w") 'evil-window-mru) (evil-define-key 'normal 'global (kbd "ZZ") 'save-buffer) (advice-add 'evil-delete-marks :after (lambda (&rest args) (evil-visual-mark-render))) (evil-define-key 'insert 'global (kbd "TAB") 'company-indent-or-complete-common) (evil-mode) (evil-set-leader '(normal visual) (kbd "")) (progn ;; navigation (evil-define-key 'normal 'global (kbd "f") 'helm-projectile) (evil-define-key 'normal 'global (kbd ";") 'helm-semantic-or-imenu) (evil-define-key 'normal 'global (kbd "j") 'helm-buffers-list) (comment (evil-define-key 'normal 'global (kbd "u") 'undo-tree-visualize))) (progn ;; completion (evil-define-key 'normal company-mode-map (kbd "TAB") 'company-indent-or-complete-common) (evil-define-key 'insert company-mode-map (kbd "TAB") 'company-indent-or-complete-common)) (evil-define-key 'normal 'global (kbd "a") 'magit) (progn ;; error jumping (evil-define-key 'motion 'global (kbd "]e") 'flycheck-next-error) (evil-define-key 'motion 'global (kbd "[e") 'flycheck-previous-error)) ;; make evil keybindings apply right away when I open a new buffer (add-hook 'window-configuration-change-hook 'evil-normalize-keymaps)) (use-package evil-surround :ensure t :after evil :config (global-evil-surround-mode)) (use-package evil-smartparens :ensure t :delight :after evil smartparens :config (evil-smartparens-mode 1) (progn ;; wrapping (evil-define-key 'normal 'global (kbd ",W") 'sp-wrap-round) (evil-define-key 'normal 'global (kbd "C-, W") 'sp-wrap-round) (evil-define-key 'normal 'global (kbd "C-, C-W") 'sp-wrap-round) (evil-define-key 'normal 'global (kbd ",w(") 'sp-wrap-round) (evil-define-key 'normal 'global (kbd ",w)") 'sp-wrap-round) (define-key global-map (kbd "C-, (") 'sp-wrap-round) (define-key global-map (kbd "C-, C-(") 'sp-wrap-round) (define-key global-map (kbd "C-, )") 'sp-wrap-round) (define-key global-map (kbd "C-, C-)") 'sp-wrap-round) (evil-define-key 'normal 'global (kbd ",w$") 'wrap-in-dollar-brace) (evil-define-key 'normal 'global (kbd "C-, $") 'wrap-in-dollar-brace) (evil-define-key 'normal 'global (kbd ",w{") 'sp-wrap-curly) (evil-define-key 'normal 'global (kbd ",w}") 'sp-wrap-curly) (define-key global-map (kbd "C-, {") 'sp-wrap-curly) (define-key global-map (kbd "C-, C-{") 'sp-wrap-curly) (define-key global-map (kbd "C-, }") 'sp-wrap-curly) (define-key global-map (kbd "C-, C-}") 'sp-wrap-curly) (define-key global-map (kbd "C-, w {") 'sp-wrap-curly) (define-key global-map (kbd "C-, w }") 'sp-wrap-curly) (evil-define-key 'normal 'global (kbd ",w[") 'sp-wrap-square) (evil-define-key 'normal 'global (kbd ",w]") 'sp-wrap-square) (define-key global-map (kbd "C-, w [") 'sp-wrap-square) (define-key global-map (kbd "C-, ") 'sp-wrap-square) (define-key global-map (kbd "C-, [") 'sp-wrap-square) (define-key global-map (kbd "C-, w ]") 'sp-wrap-square) (define-key global-map (kbd "C-, C-]") 'sp-wrap-square) (define-key global-map (kbd "C-, ]") 'sp-wrap-square) (evil-define-key 'normal 'global (kbd ",w\"") 'wrap-with-doublequote) (comment (define-key cider-mode-map (kbd "C-, w \"") 'sp-wrap-doublequote))) (progn ;; splicing (evil-define-key 'normal 'global (kbd ",S") 'sp-splice-sexp) (comment (define-key cider-mode-map (kbd "C-, S") 'sp-splice-sexp) (define-key cider-mode-map (kbd "C-, C-S") 'sp-splice-sexp)) (evil-define-key 'normal 'global (kbd ",A") 'sp-splice-sexp-killing-backward) (comment (define-key cider-mode-map (kbd "C-, A") 'sp-splice-sexp-killing-backward) (define-key cider-mode-map (kbd "C-, C-A") 'sp-splice-sexp-killing-backward)) (evil-define-key 'normal 'global (kbd ",D") 'sp-splice-sexp-killing-forward) (comment (define-key cider-mode-map (kbd "C-, D") 'sp-splice-sexp-killing-forward) (define-key cider-mode-map (kbd "C-, C-D") 'sp-splice-sexp-killing-forward)) (evil-define-key 'normal 'global (kbd ",F") 'sp-splice-sexp-killing-around) (comment (define-key cider-mode-map (kbd "C-, F") 'sp-splice-sexp-killing-around) (define-key cider-mode-map (kbd "C-, C-F") 'sp-splice-sexp-killing-around))) (progn ;; barf/slurp (evil-define-key 'normal 'global (kbd ",,") 'sp-backward-barf-sexp) (comment (define-key cider-mode-map (kbd "C-, ,") 'sp-backward-barf-sexp) (define-key cider-mode-map (kbd "C-, C-,") 'sp-backward-barf-sexp)) (evil-define-key 'normal 'global (kbd ",.") 'sp-forward-barf-sexp) (comment (define-key cider-mode-map (kbd "C-, .") 'sp-forward-barf-sexp) (define-key cider-mode-map (kbd "C-, C-.") 'sp-forward-barf-sexp)) (evil-define-key 'normal 'global (kbd ",<") 'sp-backward-slurp-sexp) (comment (define-key cider-mode-map (kbd "C-, <") 'sp-backward-slurp-sexp) (define-key cider-mode-map (kbd "C-, C-<") 'sp-backward-slurp-sexp)) (evil-define-key 'normal 'global (kbd ",>") 'sp-forward-slurp-sexp) (comment (define-key cider-mode-map (kbd "C-, >") 'sp-forward-slurp-sexp) (define-key cider-mode-map (kbd "C-, C->") 'sp-forward-slurp-sexp))) (progn ;; misc (evil-define-key 'normal 'global (kbd ",~") 'sp-convolute-sexp) (evil-define-key 'normal 'global (kbd ",a") 'sp-absorb-sexp) (evil-define-key 'normal 'global (kbd ",e") 'sp-emit-sexp) (evil-define-key 'normal 'global (kbd ",`") 'sp-clone-sexp) (evil-define-key 'normal 'global (kbd ",J") 'sp-join-sexp) (evil-define-key 'normal 'global (kbd ",|") 'sp-split-sexp)) (progn ;; narrowing (evil-define-key 'normal 'global (kbd "n(") 'sp-narrow-to-sexp) (evil-define-key 'normal 'global (kbd "n)") 'sp-narrow-to-sexp) (evil-define-key 'normal 'global (kbd "nn") 'narrow-to-defun) (evil-define-key 'normal 'global (kbd "nr") 'narrow-to-region) (evil-define-key 'normal 'global (kbd "nw") 'widen))) (use-package evil-collection :ensure t :after evil :config (evil-collection-require 'xref) (with-eval-after-load 'xref (evil-collection-xref-setup))) (comment (use-package centaur-tabs :ensure t :after evil :config (setq centaur-tabs-adjust-buffer-order t centaur-tabs-adjust-buffer-order 'right) (centaur-tabs-enable-buffer-reordering) (evil-define-key 'normal 'global (kbd "gt") 'centaur-tabs-forward-tab) (define-key global-map (kbd " ") 'centaur-tabs-forward-tab) (define-key global-map (kbd "s-}") 'centaur-tabs-forward-tab) (evil-define-key 'normal 'global (kbd "gT") 'centaur-tabs-backward-tab) (define-key global-map (kbd " ") 'centaur-tabs-backward-tab) (define-key global-map (kbd "s-{") 'centaur-tabs-backward-tab))) (defun setup-special-mode () (company-mode -1)) (add-hook 'special-mode-hook 'setup-special-mode)