Important Things I Learned from Reading Practical Vim

I started reading Practical Vim by Drew Neil after Christmas because I truly think this will be the year I go all in on vim. I'll be honest: I am doing it to seem a little cooler and intimidating, but I'm also doing it because I think there are some efficiencies to be gained from having my fingers leave the keyboard less. Also, there was this neat quote I encountered while reading the book:

"The painter does not rest with a brush on the canvas. And so it is with Vim."

What I think this quote highlights is that a lot of programming is done without one's hands on an actual keyboard. That is, you don't just mindlessly type code all day and hope it works. The real work behind programming is in thinking about problems and then writing out solutions to them. What Vim provides is an alternative to the "insert mode" that most text editors come with by default. This way, you won't be as tempted to start typing before you're ready.

Anyway, as you may know if you follow this blog at all, I've been dipping in and out of vim for the past year or so, but now that I've got this nifty book, I think I'll be able to move beyond a novice level.

For starters, here are some tips I picked up.

Real Lines vs Display Lines

Holy cow, did you know that there's a name for the lines that aren't actually lines when text wrap is enabled? Yeah, they're called display lines. Shoot. And you can navigate them by using g-prefixed j and k. This blew my mind. All this time I've been tooling around with search when I could have been smartly navigating. Gosh. I'm disappointed in myself.

Command Move
gj Down one display line
gk Up one display line
g0 To first character of display line
g$ To end of display line

The Dot Command

I've been doing everything wrong for the past year. I should have been using the dot command, which this books calls a "micro macro." The dot command allows you to repeat the last change. This is useful when you need to append punctation to multiple lines, or wrap lines in ticks or something, like I just did above. While my cursor was on the first line of the table, I hit i, inserted a backtick, exited, then j'd down to the next line and hit the ., which repeated my change. I did the same for the following two lines, and then followed a similar process to end the backtick.

Another way to do this would be to select the blocks in visual mode, then run the dot command in normal mode with :'<,'>normal . Or use visual block mode, but that's a little more complicated than I want to tackle right now.

Duplicating and Moving Lines with :t and :m in Command Mode

Turns out there's a way easier way to move and copy lines when they're far away from each other within a file.

You can use the :copy and :move commands. The shortcut versions are :t and :m, respectively. These commands follo wthe format :[range]command {address}.

Here are some examples:

Command Translation
6t. Copy line 6 and insert it below the current line
1t2 Copy line 1 and insert it below line 2
2m4 Move line 2 to below line 4

Tab Pages

I've been using NerdTREE to manage my file tree, so I won't dive too much into buffer management, but what I did thing was cool was the idea of having tab pages.

Turns out you can create a tab pretty simply with <C-w>T, which means that you hold control and w at the same time and then press capital T. The <> notation signifies a chord, holding a few keys down at the same time. You do need to have at least one window open in order to this.

Navigating between tabs is as simple as using gt to go forwards or gT to go backwards. You can also go to tabs by number.

Here's the tab cheatsheet I've always wanted.

Command Translation
:tabe[dit] {filename} Open {filename} in new tab
:tabc[lose] Close current tab and windows
:tabo[nly] Keep active tab page, close all others
:tabn[ext] {N} Switch to tab number {N}
:tabn[ext] / gt Switch to next tab page
:tabp[revious] / gT Switch to the previous tab page

So far I'm about 100 pages in and already this book is making me rethink how I'm using vim. If you are struggling to get better at the text editor everyone loves to hate and hates to love, I can't recommend this book enough.