Simple spacemacs like init script for scala development

4 min read Original article ↗
;; global variables (setq global-font-lock-mode 1 inhibit-startup-screen t create-lockfiles nil make-backup-files nil column-number-mode t scroll-error-top-bottom t show-paren-delay 0.5 use-package-always-ensure t ensime-startup-notification nil sentence-end-double-space nil) (global-display-line-numbers-mode) ;; buffer local variables (setq-default indent-tabs-mode nil tab-width 4 c-basic-offset 4) ;; modes (electric-indent-mode +1) ;; global keybindings (global-unset-key (kbd "C-z")) ;; the package manager (require 'package) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("org" . "http://orgmode.org/elpa/") ("melpa" . "http://melpa.org/packages/") ("melpa-stable" . "http://stable.melpa.org/packages/")) package-archive-priorities '(("melpa-stable" . 1))) (package-initialize) (when (not package-archive-contents) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (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. '(custom-safe-themes (quote ("d677ef584c6dfc0697901a44b885cc18e206f05114c8a3b7fde674fce6180879" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))) '(global-display-line-numbers-mode t) '(package-selected-packages (quote (helm-swoop auto-complete switch-window company-mode which-key evil-nerd-commenter evil-surround helm-ag evil-leader window-number dired markdown-mode markdown projectile neotree migemo helm-migemo use-package)))) (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. ) (use-package evil :ensure t :pin melpa-stable) (use-package ensime :ensure t :pin melpa-stable) (use-package helm :ensure t :pin melpa-stable) (use-package helm-swoop :ensure t :pin melpa-stable) (use-package solarized-theme :ensure t :pin melpa-stable) (use-package migemo :ensure t :pin melpa-stable) (use-package helm-projectile :ensure t :pin melpa-stable) (use-package projectile :ensure t :pin melpa-stable) (use-package helm-ag :ensure t :pin melpa-stable) (use-package evil-leader :ensure t :pin melpa-stable) (use-package evil-nerd-commenter :ensure t :pin melpa-stable) (use-package which-key :ensure t :pin melpa-stable) (use-package switch-window :ensure t :pin melpa-stable) (use-package eshell :ensure t :pin melpa-stable) (use-package auto-complete :ensure t :pin melpa-stable) (ac-config-default) (use-package evil-surround :ensure t :config (global-evil-surround-mode 1)) (add-to-list 'exec-path "/usr/local/bin") ;; You can surround in visual-state with S<textobject> or gS<textobject>. Or in normal-state with ys<textobject> or yS<textobject>. (require 'evil) (evil-mode 1) (require 'ensime) ;; neotree (require 'neotree) ;; helm-swoop ;; helm from https://github.com/emacs-helm/helm (require 'helm) (require 'helm-swoop) (require 'migemo) ;; Split direcion. 'split-window-vertically or 'split-window-horizontally (setq helm-swoop-split-direction 'split-window-vertically) ;; If nil, you can slightly boost invoke speed in exchange for text color (setq helm-swoop-speed-or-color t) ;; ;; Go to the opposite side of line from the end or beginning of line (setq helm-swoop-move-to-line-cycle t) ;; Optional face for line numbers ;; Face name is `helm-swoop-line-number-face` (setq helm-swoop-use-line-number-face t) ;; If you prefer fuzzy matching (setq helm-swoop-use-fuzzy-match t) ;; utf-8 (set-language-environment 'utf-8) (setq locale-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-selection-coding-system (if (eq system-type 'windows-nt) 'utf-16-le ;; https://rufflewind.com/2014-07-20/pasting-unicode-in-emacs-on-windows 'utf-8)) (prefer-coding-system 'utf-8) ;; solarized (require 'solarized) (load-theme 'solarized-dark) ;; projectile (projectile-global-mode) (setq projectile-completion-system 'helm) (helm-projectile-on) ;;(setq projectile-switch-project-action 'neotree-projectile-action) (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.")))) ;; show available keys as you type (require 'which-key) (which-key-mode) (defun switch-to-previous-buffer () "Switch to previously open buffer. Repeated invocations toggle between the two most recently open buffers." (interactive) (switch-to-buffer (other-buffer (current-buffer) 1))) (require 'evil-leader) (define-key evil-normal-state-map (kbd "<SPC>") nil) (evil-leader/set-leader "<SPC>") (global-evil-leader-mode) (evil-leader/set-key "f s" 'save-buffer "b l" 'helm-buffers-list "w h" 'windmove-left "w l" 'windmove-right "w j" 'windmove-down "w k" 'windmove-up "w q" 'delete-window "w w" 'switch-window "s s" 'helm-swoop "p s" 'helm-ag-project-root "p f" 'helm-projectile-find-file "p n" 'neotree-project-dir "p p" 'projectile-switch-project "q q" 'save-buffers-kill-terminal "; l" 'evilnc-comment-or-uncomment-lines "e e" 'ensime-print-errors-at-point "e t" 'ensime-type-at-point "e d" 'ensime-edit-definition "e r" 'ensime-inf-switch "TAB" 'switch-to-previous-buffer "c l" 'load-file "b k" 'kill-buffer) ;; evil-mode and neotree (evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "SPC") 'neotree-quick-look) (evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide) (evil-define-key 'normal neotree-mode-map (kbd "RET") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "g") 'neotree-refresh) (evil-define-key 'normal neotree-mode-map (kbd "n") 'neotree-next-line) (evil-define-key 'normal neotree-mode-map (kbd "p") 'neotree-previous-line) (evil-define-key 'normal neotree-mode-map (kbd "A") 'neotree-stretch-toggle) (evil-define-key 'normal neotree-mode-map (kbd "H") 'neotree-hidden-file-toggle)