Moving from Emacs to Spacemacs
4 minutes read | 667 words by Ruben BerenguelA couple of days ago I attended (first time I managed in almost 6 months) the London chapter of the Emacs Church (also known as the local meetup for emacs lovers). In this event we were shown (John Stevenson was the presenter) how to use emacs effectively for Clojure development (using Cider) and I saw in real life Spacemacs.
In case you don’t know, Spacemacs is a “distribution” of Emacs prepared (is open source, of course) to be easy to setup, and somehow specially prepared for former Vim users to move to Emacs. For instance, on startup asks if you want to be in Emacs mode, evil mode or hybrid (Emacs mode keys in vim insert mode) by default.
As you may remember, I’ve been using Emacs with evil for around 3 years
already,
and have been pretty happy with it. I’m not so happy about the state of my
.emacs
file: currently it is 2652 lines long (of course around 400 or 500 of
those are generated automatically by custom
). Too big and unwieldy. And I’m too
lazy to move all the nuts and bolts to something more lightweight and sane.
I thought that trying out Spacemacs could be the perfect excuse to clean the
mess off my .emacs
file, since I could carefully move piece by piece whatever I
needed as I needed it (like I usually do when upgrading computers).
For a start, the beginning was a good experience. Since by default it includes
most of the fancy stuff I use normally
(helm being the biggest, fanciest helper I
need, I only needed to tweak helm-files
and switch-buffer
, and add recentf
) and
I no longer use mu4e on a day-to-day
basis, I could easily switch to it.
It’s actually really easy to try Spacemacs alongside your normal emacs: just download it and from the spacemacs folder run something like
HOME=~/fromsource/spacemacs /Applications/Emacs.app/Contents/MacOS/Emacs
or the equivalent in your environment. Caveat: multi-term/ansi-term
won’t work
as expected (best solution is to actually move to using Spacemacs as default).
Aside from that I have had no other big issues, and recently moved to Spacemacs
to be the main Emacs and if needed I can run my old configuration with the HOME
trick.
One thing I have not figured out how to exactly do “the Spacemacs way” but I
needed no matter what is having my set of normal Emacs keybindings in evil
insert and normal modes. Hybrid mode covers insert more or less nicely, but some
commands I need them as they are because not only are they part of my muscle
memory, but I also happen to like them and use them everywhere (OS X input
fields, terminal windows). I tried to set this up in many places in the
.spacemacs file (the user-config section, using the \-init
or \-after
macros of
package initialisation…) And finally this made it work, so, in case you need
to modify evil insert or normal key maps in Spacemacs:
(eval-after-load 'evil
'(progn
(define-key evil-normal-state-map (kbd "SPC") 'ace-jump-mode)
(define-key evil-insert-state-map (kbd "C-a") 'move-beginning-of-line)
(define-key evil-insert-state-map (kbd "C-e") 'move-end-of-line)
(define-key evil-insert-state-map (kbd "C-k") 'kill-line)
(define-key evil-insert-state-map (kbd "C-w") 'kill-region)
(define-key evil-visual-state-map (kbd "C-a") 'move-beginning-of-line)
(define-key evil-visual-state-map (kbd "C-e") 'move-end-of-line)
(define-key evil-normal-state-map (kbd "C-a") 'move-beginning-of-line)
(define-key evil-normal-state-map (kbd "C-e") 'move-end-of-line)
(define-key evil-normal-state-map (kbd "C-k") 'kill-line)
(define-key evil-normal-state-map (kbd "C-y") 'yank)
(define-key evil-insert-state-map (kbd "C-y") 'yank)
(define-key evil-insert-state-map (kbd "C-t") 'transpose-chars)
(define-key evil-normal-state-map (kbd "C-w") 'kill-region)
(define-key evil-visual-state-map (kbd "C-w") 'kill-region)
(define-key evil-visual-state-map (kbd "SPC") 'ace-jump-mode)))
Something I found surprising though is the load time: Spacemacs does not load packages on startup and my .emacs
setup did, and they roughly start up at the same speed. Somehow I expected a faster startup time.
Worth also downloading the latest emacs port for homebrew, which fixes some annoyances with powerline
colours as well as being quite more up to date than Carbon Emacs.
Now the only big thing left I have is reconfiguring
multiple-cursors and my
definitions of more-like-this
and all that to be a happy Spacemacs user.