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.