Hacker News new | ask | show | jobs
by babarock 4937 days ago
I was a Vim exclusive for several years before shifting cold turkey to emacs on the 01/01/2012 (first new year resolution I keep in my life!). My impression is still the same as day one: I will never reach the same raw speeds in emacs as I used to (and still do) in Vim, but I've never had as much fun exploring the inner workings of any system as I have with emacs.

The functions described in the article are crucial. You should rewire your brain to type them every time you ask yourself a question.

Generally speaking, Unix is very good at self documenting. Whether it's text editors (vim/emacs), shells (bash, zsh, ksh) or just plain man pages (did I mention the info pages for GNU tools?), the systems are great at holding their own full documentations.

I cannot recommend enough adopting the reflex of checking the local documentation before opening your web browser and hitting Google.

3 comments

Re switching: I did the same thing. After a year or two of doing my best to use Emacs as it was intended -- to ensure I "got" it -- I recently switched to evil-mode (another one of those vim-in-emacs implementations) and have been quite happy with it. I still get the good Emacsian stuff like using C-x C-e to eval one-offs in a scratch buffer but I also get the superior vi keybindings for navigating text.

(To respond to another comment here, I also tried viper mode but it never stuck. It might have been too soon after switching, or it might have been that it was missing some integrationy magic that I gave it the wrong feel.)

Another vote for evil-mode. I'm a long time Emacs user that started using Emacs after being quite proficient in Vim. One reason I switched was for Emacs' Common Lisp environment, the other is I never really liked vi's modal editing paradigm.

However after many years of searching for the perfect keybindings I rediscovered Vim's charm for navigating and editing text, although I will never leave Emacs for it. The latter is too powerful. With Vim bindings finding their way in more and more applications they start to become pretty universal. (That said, it still prefer Emacs bindings in my shell.)

Evil really does give me the best of both worlds even wrt to keybindings and because of the muscle memory also makes firing up Vim on the shell or another server really convenient.

If you're a pure Vim user you will have to get used to some Emacs behavior, it is no drop-in replacement but it is pretty darn close. Some modes (Magit - a Git mode) are not supported.

This is my experience exactly. I was a long-time, very fast Vim user, but I wanted to play around with Proof General, an Emacs mode for using proof assistants like Coq[0]. Emacs slowly cannibalized my Vim usage from there: I started using it for Clojure, and was amazed that M-. would hop me into Clojure source. Then I started using it for Erlang, and then I started taking all my notes in org-mode. It wasn't until I was already pretty comfortable in Emacs that I learned about the C-h commands.

For pure text surgery, I'm still significantly faster in Vim. But the fact that Emacs is so explorable/discoverable is just so fun!

[0] http://proofgeneral.inf.ed.ac.uk/

> For pure text surgery, I'm still significantly faster in Vim.

Have you tried viper mode or one of the equivalents? I'm curious how it compares to vi. One of the things that I (as a long time Emacs user) have considered is to switch to using viper mode, even though I only know vi enough to edit a config file on a remote machine that lacks emacs. But I'm curious how it compares to the real thing, and if it gets in the way of ancillary emacs stuff (I can't live without stuff like "C-x v =" and "M-/").

Skip viper-mode and go straight to evil-mode, which is based on modern Vim rather than classic vi. It even supports a plugin system, so that missing features and popular extensions (like surround.vim) can be reimplemented with ease (https://github.com/timcharper/evil-surround).

The difference between Vim and the original vi is pretty huge. Just as an Emacs user might be stymied by the missing Lisp support in uemacs or zile, a habitual Vim user leans on stuff like text objects and visual selections, which were never even a twinkle in Bill Joy's eye.

Evil[0] is where it's at for vi/m emulation. In my, albeit short, experience Evil is much less obtrusive than Viper and Vimpulse.

[0]: https://gitorious.org/evil/pages/Home

I haven't. Oddly, I find that the Vim and Emacs parts of my brain are completely separate. When I open Vim, my fingers do Vim stuff, and when I open Emacs, my fingers do Emacs stuff.
I'm very curious about this. I've had the opposite experience: I was a slow Vim users (but stil, Vim lover), and I switched to emacs to use ESS-mode for R. Soon I realized the core movement operations I clumsily had to switch modes for in Vim were the same in bash (by default configuration) as they were in Emacs. Even textboxes in OS X behave somewhat same way. C-a, C-e, C-k, C-y M-b, M-f, are all the same for example. So is searching (C-r, C-s). I was fast at these in bash, so learning them in emacs was a breeze. So, how do you use bash? Do you use these bindings?
C-r is very handy in bash. On the subject of search - I recently switch from Emacs to Vim, just to try something new. It's working out well, but so far I have not found an equivalent for C-s <some letters> C-w C-s(C-w to grab the current word, C-s again searches for the next apperance of it). This is still the best way to search incrementally that I have found in any editor. Any tips on how to do the same thing in Vim (with as few key-strokes as possible) are appreciated.
* in edit mode is what you want - http://vimdoc.sourceforge.net/htmldoc/pattern.html#star - though it's not quite the same, as it will search left and right for the word boundary.

(emacs is actually a bit unwieldy by comparison - * was one of the things I missed when I left vim. I was also used to using this same functionality in Visual Studio and Scite (it's Ctrl+F3), so it was well embedded into my workflow.)

Thanks. Yes, * is good, but only if you already are at the word you want to search for. When that's not the case, in Emacs I hit C-s, typed the first few letters, found the word, grabbed it with C-w, then hit C-s repeatedly. In Vim, I haven't found quite the same convenient way. I have been getting out of incremental search, then used *, but it's a few more key strokes, especially if the first hit is not the word I'm looking for.
Use n to go to next occurence of your search pattern and N to go the other way.
Isn't '/' in Vim able to search incrementally? It does in evil-mode in Emacs.
bash and anything else which uses readline offers a vi support mode [1]. Other shells, like zsh, allow you to use vi bindings as well [2].

[1]: http://blog.sanctum.geek.nz/vi-mode-in-bash/ [2]: http://zshwiki.org/home/zle/emacsandvikeys

Evil mode is excellent. I used emacs for about 3 months without learning almost any emacs-specific key bindings.