evan_tech

Previous Entry Share Next Entry
08:23 pm, 22 Jan 09

emacs

I've been using vim for a very long time -- over ten years -- but over those years I've envied more and more the way emacs integrates other software. So a few months ago I switched. I don't see it as the religious issue that many people make it out to be, so the only real hurdle was taking the time to read the manuals.

It turns out switching is surprisingly not that painful; any competent user of a Unix is already familiar with the basic emacs keybindings because shells use them too. People have historically complained about emacs being bloated but it was bloated on computers of the 80s; it's tiny compared to even simple Java or web-based software today. I have found my mind has "vi mode" and "other editor" mode, so I keep hitting emacs keybindings in Firefox or Visual Studio.

For comparison (eclipse/emulator are the Android development tools):
 8916 martine   20   0  717m 181m  33m S    0  9.0   0:57.65 eclipse
 9005 martine   20   0  280m 137m  23m S    0  6.8   1:06.25 firefox
 9788 martine   20   0  162m 115m 5416 S    2  5.7   2:13.31 emulator
11260 martine   20   0 32632  19m 9068 S    0  1.0   0:00.52 emacs


What I like:
  • ediff is great. I had previously used meld but meld is buggy and underpowered.
  • I use the Python, Haskell, and R integration all the time. It's so convenient to have a REPL that works within your editor. It's pretty much the reason I switched. Type some Haskell code, hit C-C C-l, and your cursor is in a buffer with your code loaded.
  • The buffer management concept makes a lot of sense. The way you switch between buffers with C-x b matches my workflow well.
  • magit made my work on improving the git UI effectively obsolete. (But it's really slow for some reason...)
  • "C-h a" is a useful way to interface with a huge interface surface
  • The vim scripting language is an abomination and I refused to learn it. I've already made a tiny function in emacs lisp for composing entries for my blog software.

What I don't like:
  • I believe the basic editing key bindings are just not the way I operate. I made a point of not using viper because it produces the uncanny valley effect, where it's close enough to vi that you get frustrated by esoteric keys not working, and instead forced myself to learn the emacs way before I start changing things. But now I'm again considering trying viper.
  • Undo. I get how it's intended to work but it never quite feels right. Could be learned through more experience, maybe.
  • I feel like the different programing modes have different keys do needlessly different things. I understand that a unified UI is contrary to the point of a software system defined by its customizability, but that makes it hard for me to get an intuition for the natural way things ought to work. For example, why doesn't C-h m show me the Haskell-mode specific keybindings while it does in other modes?

I get the feeling there are tons of customization tricks that people use that I'm missing. So please, tell me your emacs tips!

One of the big things I've been wanting is making it so when I load up code under the Chromium directory my editor configures itself with the appropriate defaults (e.g., .h files are C++, and M-x compile should run SCons from the proper directory). I saw some project local variables scripts on the emacs wiki but I couldn't get them to work right, probably because I'm missing understanding.