Emacs -> Vi(m) -> Emacs
When I started programming in college it was Lisp and C and I got a co-op working for a big defense contractor doing C and everyone there used Emacs so I used Emacs. I remember being very good at it at the time.
Then I started to do quite a bit of sys admin work along with Perl and web scripting during the dotcom days and switched to Vi as I found it much quicker to use when doing sys admin tasks and Perl was quite simple as well.
Then I started to do enterprise Java development. I call these my 'dark years'. Eclipse, IntelliJ and others but with Vi keybindings if I could find plugins for them (search and replace in Vi is great...love just hitting the '/' and beginning to type.)
Then I started to do some Erlang and Clojure and I Vi wasn't cutting it anymore. So I started to use Emacs again (this is about 12 years later at this point, btw) and realized I didn't remember anything. So I grabbed Emacs Start Kit on github, forked it and started to hack up an environment I felt comfortable in. Slowly It has been coming back to me, but in the time since I was out of Emacs there have been some good advancements.
At this point, I think I have the best of both worlds in that I know Vi(m) pretty well, have a really good .vimrc that I like and I also have an ability to use Emacs for non-trivial tasks and feel I'll be able to really use it in about 3 more months of steady use. The weirdest thing is trying to hit escape (or 'jj' as I've remapped it) in Emacs...
All in all, I think I will end up preferring Emacs for non-trivial tasks and still use Vim for basic text editing or sys admin tasks.
I do like both for their various strong points, but at the same time I have to say that both are quite annoying in other ways. I just have to learn to love their strengths rather than hate their weaknesses.
When I first learned vi, I kind of hated it because I was editing code on an ancient system that used a COBOL-like language, in which most things were in upper case. Because vi's commands are all case sensitive, combined with the fact that I used capslock a lot for coding, it was kind of a pain. Also this language did not use a c-like syntax with punctuation, it instead used a lot of english words.
Later when I switched to editing C source code with vi, suddenly vi's quirks and methods of operation become far, far more productive than they were using vi.
I had a very simple reason. I spend 4 hours a day in front of an editor, so I need something very powerful. I had standardized on XEmacs, but I had to stop when the pinky muscle strain got too bad (this was years after having remapped caps-lock to control). My hand would hurt when I got home.
I usually program in C/C++, Perl, and some XML & text editing, so I wasn't using Emacs' dynamic or programmable features much.
Vim is attractive because there's not really a need for modifier keys, just key sequences. Additionally, the great text navigation features are good when working with large existing codebases, it makes reading other people's code easier.
I kept going back to Emacs for XML editing for a while, but the mental overhead of keeping track of two systems is a bit much, and I found Komodo Edit a nice replacement (that incidentally also has a Vi-mode).
The only thing I really miss from Emacs is being able to "Ctrl-K" 3 times and pressing "Ctrl-Y" once to move 3 lines. With Vim you have to count the number of lines ahead of the operation, which is a real speedbump.
With Vim 7.3, a new option 'relativenumber' was introduced to help with this.
From :h relativenumber
Show the line number relative to the line with the cursor in front of each line. Relative line numbers help you use the |count| you can precede some vertical motion commands (e.g. j k + -) with, without having to calculate it yourself. Especially useful in combination with other commands (e.g. y d c < > gq gw =).
V-jjj-x
If I understand you correctly. I don't speak emacs.
I agree this is a big problem, and here are 2 ways I combat this in vi.
One way to combat this: Use } and {. These cursor controls in vi move to the next blank line. If you structure your source code such that you have paragraphs sections or blank lines between major operations, this works very well. Arguably, good code should have a brief comment explaining what or why something is happening, followed by somewhere between 1 and 8 lines that do the work. If your code follows this style, then the } and { keys in vi navigate that code ultra quickly. Say you've got 2 paragraphs that now need to go into an if statement, you press 2}>> and it just indented those lines for you, without you having to count how many lines it was.
Another way to combat the problem of counting lines is with named markers. Go to the first line and press mk. This creates mark k. Go to the end of the section you're interested in, and do something like >'k. This indents the code starting from point k down to where you're at.
I suppose you are a recent Vimer. I'd suggest to once in a while peruse threads offering Vim tips, such as in Stackoverflow. You might find some true gems in there. As noted by auxbuss, [shift-v jjj x] solves your issue.
v
V
and CTRL-v
It's well worth your time to learn them all.See
:help visual-use
for more info.