OK, so this was “Thursday I learned” but I figured I should write it down before I forget again. One of my frustrations with Vim is better learning to use the command line. In this particular instance, I had been searching for a phrase inside a single file and I wanted to instead search for it with
git grep (using
:Ggrep from the awesome fugitive.vim). Of course, I didn’t want to retype the thing I’d already been searching for. Turns out there are a couple of viable options:
ctrl-r /will insert the last search pattern. So, having searched for something within a file and now wanting to search for it throughout the repository, I could do
:Ggrep ctrl-r /<cr>. I think I want to turn that into a shortcut of some variety…
The other possibility is to insert the word under the cursor.
ctrl-r ctrl-wwill insert the “word” under the cursor and
ctrl-r ctrl-awill insert the “WORD” under the cursor (with ‘word’ and ‘WORD’ meaning what they usually do).
Here’s a random bunch of other useful expansions:
ctrl-r "will insert the contents of the unnamed register (i.e. the last thing you yanked or deleted without specifying a register).
ctrl-r +will insert the clipboard contents.
ctrl-r %will insert the current filename.
ctrl-r ctrl-pwill insert the filename under the cursor, expanded in the same way as
gfdoes. This could be particularly useful with filetype plugins that extend the behaviour of
It was useful to read through the rest of the command line reference to reinforce the rest of the command line movement keys, too. So far I’d mostly just been mashing keys, assuming it behaves a bit like bash command line editing. Mostly I was right:
ctrl-a) to get to the start of the command line buffer.
ctrl-eto get to the end of the command line buffer.
ctrl-wto delete the word before the cursor.
ctrl-uto delete the characters from before the cursor to the start of the line (in other words,
ctrl-e ctrl-uwill delete the entire contents of the command line).
ctrl-cto get safely out of the command line.
Update Drew, of Vimcasts fame, has pointed out that
ctrl-r works in insert mode too. That’s mind-blowingly useful. For example, you can use
ctrl-r " in insert mode to paste something without exiting insert mode. I wish I’d already known that!