about summary refs log tree commit diff
path: root/configs
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2016-12-31T23·13-0500
committerWilliam Carroll <wpcarro@gmail.com>2016-12-31T23·13-0500
commitf2facdb949b2494941d15d9fb32f0195c432fe03 (patch)
tree4a8ca6e6c7f51dac8cbd2448f7889b758ad0b564 /configs
parent893956db0cbd3311d1e6f54762cb532e76623d6e (diff)
Adds smart Evil mode bindings and external plugins
Diffstat (limited to 'configs')
-rw-r--r--configs/.emacs79
1 files changed, 75 insertions, 4 deletions
diff --git a/configs/.emacs b/configs/.emacs
index 755d5e2120a5..858239067938 100644
--- a/configs/.emacs
+++ b/configs/.emacs
@@ -3,11 +3,22 @@
 (require 'package)
 (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
 (custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
  '(mouse-wheel-mode nil)
+ '(neo-window-fixed-size nil)
+ '(neo-window-width 35)
  '(package-selected-packages
    (quote
-    (evil helm-swoop iedit vimrc-mode helm-ispell transpose-frame helm-projectile helm-ack nyan-mode alchemist helm magit dockerfile-mode elixir-mode elm-mode ack))))
-(custom-set-faces)
+    (neotree evil helm-swoop iedit vimrc-mode helm-ispell transpose-frame helm-projectile helm-ack nyan-mode alchemist helm magit dockerfile-mode elixir-mode elm-mode ack))))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(hl-line ((t (:background "gray7")))))
 
 ;; Colorscheme
 (load-theme 'wombat)
@@ -15,6 +26,9 @@
 ;; Emacs backup files
 (setq-default make-backup-files nil)
 
+;; Automatically follow symlinks
+(setq vc-follow-symlinks t)
+
 ;; NyanCat progress bar
 ;; (nyan-mode)
 
@@ -65,6 +79,27 @@
 (require 'evil)
 
 
+;; NeoTree Settings
+(require 'neotree)
+
+(defun neotree-project-dir ()
+  "Open NeoTree using the git root."
+  (interactive)
+  (let ((project-dir (projectile-project-root))
+        (file-name (buffer-file-name)))
+    (neotree-toggle)
+    (if project-dir
+        (if (neo-global--window-exists-p)
+            (progn
+              (neotree-dir project-dir)
+              (neotree-find file-name)))
+      (message "Could not find git project root."))))
+
+(global-set-key (kbd "<f8>") 'neotree-project-dir)
+
+(add-hook 'neotree-mode-hook (lambda () (bootstrap-evil-mode) (hl-line-mode)) )
+
+
 ;; Buffer scrolling functions
 (global-set-key (kbd "M-n") (lambda () (interactive) (scroll-up 1) (next-line 1)))
 (global-set-key (kbd "M-p") (lambda () (interactive) (scroll-down 1) (previous-line 1)))
@@ -96,14 +131,50 @@
 ;; Change font settings
 (add-to-list 'default-frame-alist '(font . "Hasklig"))
 
+
+;; Personalized Evil-mode settings
 (defun bootstrap-evil-mode()
-  "Custom evil-mode boostrapping"
+  "Custom evil-mode settings. This disables Emacs key-bindings found in 
+`global-map` when inside Vim's `normal` mode. It disables Vim key-bindings
+when in Vim's `insert` mode, favoring native Emacs bindings instead."
   (interactive)
   (evil-local-mode)
+
+  ;; Toggle off Emacs bindings when in Vim `normal` mode except:
+  ;;   * `M-x`
+  ;; (setcdr global-map nil)
+  ;; (define-key global-map (kbd "M-x") 'helm-M-x)
+
+  ;; unbind <SPC> and <CR> in normal mode since they're hardly used
+  (define-key evil-motion-state-map (kbd "RET") nil)
+  (define-key evil-motion-state-map (kbd "SPC") nil)
+
+  ;; use 'helm-swoop for interactive search
+  (define-key evil-motion-state-map (kbd "/") 'helm-swoop)
+
+  (define-key evil-normal-state-map (kbd "C-h") 'evil-window-left)
+  (define-key evil-normal-state-map (kbd "C-l") 'evil-window-right)
+  (define-key evil-normal-state-map (kbd "C-k") 'evil-window-up)
+  (define-key evil-normal-state-map (kbd "C-j") 'evil-window-down)
+
+  (define-key evil-normal-state-map (kbd "M-l") (lambda () (interactive) (evil-window-vsplit) (evil-window-right 1) ))
+  (define-key evil-normal-state-map (kbd "M-h") (lambda () (interactive) (evil-window-vsplit) ))
+  (define-key evil-normal-state-map (kbd "M-j") (lambda () (interactive) (evil-window-split) (evil-window-down 1) ))
+  (define-key evil-normal-state-map (kbd "M-k") (lambda () (interactive) (evil-window-split) ))
+  
+  ;; Toggle off Vim bindings when in Vim `insert` mode except:
+  ;;   * `<escape>` <ESC>
+  ;;   * `j k` <ESC>
+  ;;   * `j j` "j"
+  (setcdr evil-insert-state-map nil)
+  (define-key evil-insert-state-map (kbd "<escape>") 'evil-force-normal-state)
   (define-key evil-insert-state-map (kbd "j k") 'evil-force-normal-state)
-  (define-key evil-normal-state-map (kbd "H") 'evil-beginning-of-line)
+  (define-key evil-insert-state-map (kbd "jj") (lambda () (interactive) (insert "j")))
+  
+  (define-key evil-normal-state-map (kbd "H") 'evil-first-non-blank)
   (define-key evil-normal-state-map (kbd "L") 'evil-end-of-line))
 
+
 ;; Line Numbers in margin for source code mode
 (add-hook 'prog-mode-hook 'linum-mode)
 (add-hook 'prog-mode-hook 'bootstrap-evil-mode)