A few days ago I decided to try out Spacemacs, an Emacs Kit designed around Evil Mode (vi simulation in Emacs) and a Leader key (Space, hence Spacemacs). The Spacemacs tagline says “the best editor is neither Emacs nor Vim, it’s Emacs and Vim!": let’s see how it feels!
What I want from my editor
- vi motions :)
- git integration
- file navigation and manipulation
- seamless navigation between the editor’s splits and
- editing of lisp s-expressions
What I got with Spacemacs
First of all, a great documentation! In general, a tool already packed with a number of
nice-to-have features and a consistent set of keybindings (more about this below).
“Oh god, it’s so slow!"
I soon got through that stage by having a Emacs server running in the background (
emacs --daemon) and connecting to it with
A note about keybindings
All keybindings are organized around
<Space> followed by a sequence of keys and they are grouped by functionality, so (for example) all
git related keybindings are prefixed by
<Space> g. This makes it much easier to remember them, and gives a very consistent experience! If you don’t remember a specific binding but you still remember its prefix, you can type the prefix and wait, a popup will show you all the defined keybindings… Also,
<Space> ? will bring up a popup which allows you to search through all the keybindings.
Spacemacs is built around Evil Mode, an amazing simulation layer which gives all the
vi motions I can think of. One small (intended) difference between standard
vi motions and Spacemacs is in how
s behaves in visual mode: it has been in fact remapped to some sort of
vim-surround functionality… Here’s an example: say we have the word
hello and we select it (
ve), then we press
s… Nothing happens because Spacemacs is still waiting for an input. If we now type
" we get
"hello". I’m still getting used to this but I like to have this easy way to surround a selection! Also, the original functionality is still available by using
Update: Unlike previously stated in this post, it is actually possible (and very easy) to use
jk as the escape sequence but there was a mistake in my configuration. As suggested by
@spacemacs (thank you, this tip made my day!), it can be set by adding the following expression to
(setq evil-escape-key-sequence "jk")
git configuration layer provides a nice git integration (although
git gutter is a bit buggy). Tip:
time machine (
<Space> g t) allows you to browse through the current file’s git history!
Out of the box, Spacemacs already provides some
nice-to-haves (find file in project, surround words, easy motion): in addition, there are many
configuration layers to choose from, so most of the times one line in
.spacemacs is enough!… and of course, there’s
projectile is packed under the prefix
<Space> p, which provides features well known to
CtrlP users like myself: for example,
<Space> p f brings up a popup which lets your search a file everywhere in the project (
projects are defined implicitly: the root is the directory which contains a
.git repository) whereas
<Space> p e brings up a list of recently opened files.
Seamless navigation between emacs and tmux
It’s as easy as adding one line to
tmux configuration layer) and define the keybindings in
tmux.conf. Done! The keybindings are available here: evil-tmux-navigator.
Editing of lisp s-expressions
I’m not a
lisp ninja but I like to write some
clojure code every now and then, and I grew used to
paredit.vim, which happens to be a porting of Emacs own
vim… Spacemacs uses evil-lisp-state to provide the same functionality, available under the prefix
Conclusions (for now)
So far I’m pretty happy about Spacemacs, also considering that setting it up to have a configuration very close to my
vim’s took me just a couple of hours (mostly spent reading the documentation). This gave me enough motivation to try and make the switch: since yesterday,
vim is aliased to
emacsclient in my shell… Let’s see how this goes!