My emacs setup
I moved to emacs some time ago. Before using it I was a Vim user and after using it for quite a long time I decided to try emacs to see what it had to offer.
I started by using prelude it worked pretty well and I was pretty happy with it. The only problem I found on it is that I missed modal edition too much. So, after some time with prelude I moved to Spacemacs.
Spacemacs puts together emacs with a quite sane configuration for evil
It works pretty well, if you’re a Vim user and you’re thinking on trying emacs this is a good way to move. If after some time you don’t want to use the modal edition anymore you can configure it to work the “emacs way” and it will work as well as with evil. I’m not going to explain all the cool things on Spacemcas, for that you can just check their page and amazing documentation, it explains everything pretty well.
I’ve very little customizations for emacs, I mostly use the spacemacs’ default config expcept for some stuff:
Emacs as daemon
Starting spacemacs takes a bit of time, so the best way to have it working is to
start emacs as a daemon and then using the emacsclient
command to connect to
it.
By default, starting spacemcas starts it as a daemon but sometimes I found
myself starting Spacemacs from the desktop environment and then connecting to it
for small editions like quick git commits. Right now I use
Arch Linux on my development machine so I started
playing with systemd to start it
for me. It turned out to be a very quick win. One good thing with arch and
systemd is that you can set up systemd to have user managed unit files (not
started by root). To do so you just have to create the unit on
~/.config/systemd/user/emacs.service
This is the one I use for spacemacs:
After adding the file just do:
systemctl --user enable emacs # to make it start with the machine
systemctl --user start emacs # to start it right away
systemctl --user stop emacs # to stop the daemon
systemctl --user restart emacs # to restart the daemon
Connect to emacs daemon from the terminal
Now, to connect into your emacs daemon you just have to do emacsclient -t
.
I usually set it as my default editor with this on my zshrc:
export EDITOR="emacsclient -t"
and then I set an alias for it:
alias e=$EDITOR
Then, when I want to edit a file I just do: e filename.ext
Connect to emacs daemon from the desktop environment
That’s pretty cool for quick edits in the terminal, but most of the times I work
on an emacs window on my desktop environment. I wanted to be able to connect to
the daemon too, so I ended up adding this to
~/.local/share/applications/spacemacs.desktop
:
The -c
flag asks emacsclient to create a new frame controlled by the window
manager. In my case Gnome Shell.
Emacs customizations
As I said before I almost use “vanilla” spacemacs. Most of its config is good enough for everything I do, except for a couple of things.
All this configs go in the dotspacemcas/user-config()
function on your ~/.spacemacs
Word movement:
If you’re a Vim user, you’d expect that moving 1 word in method-name
would
take you to the last e
. This is not the case in emacs. To change it in ruby
and javascript:
(add-hook 'js2-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
(add-hook 'ruby-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
Edit rabl files with ruby:
;; *.rabl files are ruby
(add-to-list 'auto-mode-alist '("\\.rabl" . ruby-mode)))
Open the project root when selecting a project with projectile
;; Go to project root folder when switching to it
(setq projectile-switch-project-action 'projectile-dired)
Have a separate file for the emacs customizations.
Emacs has an easy customization mechanism
(see).
I don’t use it most of the times, but there’re some times in which emacs stores
stuff in the ~/.spacemacs
file because of it even if you don’t want it. To
avoid it I use a separate file for this customizations. To do so, add this to
your dotspacemacs/user-init()
:
(setq custom-file "~/.emacs-custom.el")
(load custom-file)
All customizations will to to ~/.emacs-custom.el
instead of your dotspacemacs file.
Others
I also have other stuff customized, like the layers I load, etc… but not much. If you’re curious you can check my dotspacemacs file
I’m sure I’m missing something, but this is most of it. Enjoy emacs and good hacking!