For longtime (Neo)Vim enthusiasts, nothing here will blow your mind. However, if you’ve always felt like there are more builtin features of Vim you’re missing out on, here’s a handful of useful features I’d overlooked for years which don’t require any plugins.
Neovim’s Builtin Terminal Emulator
This is probably the most killer built-in upgrade that Neovim offers over standard Vim. Basically, Neovim exposes a new “terminal” mode that forwards all your keystrokes to an underlying terminal (which is handled by a cross-platform terminal emulator library).
Compared to using tmux + Vim, Neovim’s terminal editor lets you keep all your buffers (and terminal) in a single Vim instance. So your jump list, yanks, and global state are shared. For folks like me too lazy to learn tmux, I can cross that off my list.
Starting Terminal Mode in the Current Buffer
And then type anything that will put you into insert mode (
Start Terminal Mode in a New Buffer
If you’d rather split the current buffer and start a terminal in that, type this:
Then click or
<C-W>h into the new terminal buffer and use insert mode.
Exiting Terminal Mode
Personally, I find that a bit too cumbersome, so I’m definitely going to remap that to something else.
To learn more about terminal mode, see the official docs.
Deciphering Vim’s Key Notation
I found myself perpetually confused by the key notation I’d see everywhere online and in the builtin docs. Finally, I determined to search until I found an explanation. Here’s a semi-official wikia entry which does a great job of explaining. Here’s the major takeaways:
<C-...>means CTRL and … at the same time. Ex:
<S-...>means Shift and … at the same time.
<A-...>means Alt and … at the same time.
<BS>is backspace (not profanity…silly I know).
<F1>is the F1 key. No shocker there, just mentioning it in case you can’t easily access your function keys.
<ENTER>is the enter key.
Additionally, you can always escape a single key stroke in insert or normal mode (and possibly other modes too) by pressing CTRL-V first. For example, CTRL-V and ENTER becomes `
` which is the same as
<ENTER> but a lot fewer keystrokes.
Vim’s Visual Blockwise Edit
Seriously…how did I not know about this? How?! Basically, you can visually select a rectangular region of the current buffer and make the same change to all of them simultaneously. This is a really fast way to change a list of items that start with a single quote into a list of items that start with double quotes, or other tedious tasks which are difficult to change by using regex. Here’s a quick example of visual blockwise edit in action:
In that gif, I pressed
CTRL-V (sorry, using the mouse doesn’t work by default) in insert mode to start visually selecting. Next I pressed
l three times. Then I pressed
j repeatedly to select down several rows. Instead of the selection wrapping around the end of the current line, a “block” of text is selected straight down. Any operator will be previewed on the first line but applied to all lines of the block selection. I pressed
x to delete the entire selection.
Another idea that you might try is changing the whole selection with
c followed by
ESC after your changes.
Search and Replace Within a Selection
- Use the cursor to select (or press
vand use motion commands) to select a block of text
:. You should the statusline show
:'<,'>which simply means the selection
Vim’s Ways of Moving
- Go to line (normal mode). Type the line number then capital G. Ex:
- Ignore case for only one search. Add
\cto the end (for “case”). Ex:
- Jump a paragraph forward
- Jump a section forward
- Jump back to a previous jump -
- Jump forward to a previous jump -
A “jump” can be triggered by using
]] and other forms of movement. See
Writing this article made me realize how much of Vim I’m not taking advantage of, and that it always pays to invest a little more time and effort into your tools. What’s your favorite builtin features of (neo)vim? I’d love to hear in the comments. Better yet, open a PR against this article with your corrections and additions.