Vim takes a lot of dexterity and practice. Speed comes with time and a lot of muscle memory. It's a big investment, but worth it.
And then you break your hand.
That's OK. You can still work at a decent pace. Here are some tips.
Macro Everything
Basic
First, add a macro to edit and to source your vimrc. You will need to edit it a lot.
" edit this file
:nnoremap <leader>ev :vsplit $MYVIMRC<cr>
" re-source this file
:nnoremap <leader>sv :source $MYVIMRC<cr>
Going forward, you can open, change, save, and source your runtime config in no time.
Add mappings for write and quit.
:nmap <leader>ww :w<cr>
:nmap <leader>qq :wq<cr>
Common Structures
As you're writing code, you will recognize structures you use a lot. Add insert mappings for them. For example, in insert mode, if I want to reduce
an array, I can type ...
foo.rrr
and it will be swapped with
foo.reduce((acc, value) => {
return {
...acc,
}
}, {})
Take the time to write these. You'll have to goof around to find what you like, hence the quick source thing we did at the beginning. Here are some I'm using for JavaScript.
" insert if block
" if () {
"
" }
:imap iii if () {<cr>}<esc>kwa
" insert braces
" {
"
" }
:imap {{{ {<cr>}<esc>O
" insert brackets
" [
"
" ]
:imap [[[ [<cr>]<esc>O
" insert arrow fn
" () => {
"
" }
:imap ((( () => {{{return
" map loop
:imap .mmm .map((item) => {<cr>return item<cr>})<esc>kA
" reduce loop
:imap .rrr .reduce((acc, value) => {<cr>return {<cr>...acc,<cr>}<cr>}, {})<esc>kkA
" console
:imap ccc console.log()<esc>i
Efficient Moving
Take a moment to think about what you're navigating to. Lazy kkkkkjjjjkj
crap doesn't work well in one-hand mode. Look at relative line numbers. Move to them properly.
- Go up 17 lines with
17k
. - Go to the next r with
fr
. - Go to the first blank line above you with
{
. - Go down 3 folds with
3zj
.
Brush up on your movements a bit and take the time to do them correctly.
Use <C-o>
and <C-i>
a lot. As you hit the wrong keys, you'll bounce around a lot. These take you back or forward.
Don't be a purist. Sometimes the mouse is faster, especially when you're
confused.
Avoid Typing
Especially if you're typing really long entity names, use ctrlp.vim or something to auto complete for you. This avoids typos and can be much faster. This includes when opening files.
Slow is Smooth, Smooth is Fast
That's an Infantry motto that applies well here. I'm going to take these next many long weeks to practice deliberate movement and optimizations. Yeah, it will suck, but I'll come out the other end even faster.
Top comments (6)
Careful, soon enough you will have right hand macros on one vim window and left hand macros on another window. You will be able to write two programs at once, but at the expense of the hemispheres of your brain becoming unnaturally independent and your personality becoming irreversibly altered.
You could claim that's a natural result of using Vim anyway.
Sorry you broke your hand, that's gotta suck. Hopefully the recovery goes well!
I'll admit I use my mouse in VIM daily. You're right sometimes it's just more convient. It's a good tool to have even if you don't use it all the time
This is what I kept thinking as I read this! I can't imagine how fast you'll be once you are back to two hands!
Thanks for the good vibes!
This reminds me of relearning to write in cursive. You have more time to think about what you're writing. As a result, you are more thoughtful and less likely to "ramble."
Here is a "cheat sheet" of Vim Motions:
gist.github.com/dahu/3986511
Hope you get better soon!
Great tips, and excellent mug