Vim supports filter commands, where a filter is a program that accepts and changes text using standard IO. I'm going to give some Unix-based examples, so the actual binaries I refer to may not be available in Windows, but the principles are the same.
Shell commands can be executed and displayed by typing :!{command}. The results can be read into the current buffer by using the :r[ead] command. For example, :r !ls will append the output from the ls Unix command into the current buffer. Typing :!! will repeat the last :!{cmd}. For more information, type :help :! when in Vim.
Rather than just executing Unix commands, filters allow text to be sent and received. The general form of the ! command is !{motion}{filter}. While in Normal mode, typing !4jsort will cause Vim to sort the next four lines. Let's break this down:
Cloud Vi by Thomas Georgiou is a mashup of jsvi and Filepicker.io. The original jsvi JavaScript project is almost 4,000 lines of JavaScript, with cross-browser support and almost all of vi's keys and Ex commands.
By adding Filepicker.io, Thomas has injected new life into jsvi because it enables it to save files to Dropbox and Box.net. Files can also be loaded by typing :e file -- a dialog box will appear that allows imports from Dropbox, Facebook, GitHub, and more services.
Sharefix (GitHub: samiconductor / vim-sharefix, License: MIT) by Sam Simmons makes it easier to work with multiple quickfix lists. If you're running unit tests and getting a list of failing tests in your quickfix list, then it can be annoying when another command overwrites it. This plugin helps make quickfix commands work together.
Once installed, a Sharefix function is exposed that can be used to wrap commands or functions that update the quickfix list. The author has included documentation and usage examples.
GDBFromVim
GDBFromVim (GitHub: skibyte / gdb-from-vim, License: GPL2) by Fernando Castillo provides gdb integration that automatically starts and manages a gdb instance. It requires Python and Gdb lib, and provides lots of commands for interacting with the debugger, like GdbFromVimRun and GdbFromVimNext.
In Vim 101: Registers, we looked at registers, and how to yank and put text. In Normal and Visual mode, motions can be combined with operator commands, which offers a convenient way to apply operators to text selections.
For example, y2as will yank two sentences into a register. This can be broken down as follows:
y - The yank operator
2 - The count argument for the motion
as - A sentence
Similarly, yw will yank the current word under the cursor into a register, and y5l will yank five characters to the right (including the one under the cursor).
When I saw Tim Pope's excellent vim-afterimage script, it reminded me that Vim is completely capable as a binary file editor. Opening a file with -b or running :set binary makes Vim more suitable for editing binary files:
textwidth and wrapmargin are set to 0
modeline and expandtab are turned off
The fileformat and fileformats options won't be used
Files will be written using single line endings
Navigation
When navigating binary files, [count]go is useful because it moves the cursor to a byte offset. To get the current location, use g CTRL-G which displays the current column, line, word, character and byte.
tips.vim (GitHub: yesmeck / tips.vim) by Wei Zhu is a small Ruby-based script that displays tips when Vim is launched. Tips are displayed in the status line, and :NextTip will show another one.
The tips are downloaded from the vim-tips.org site, which allows tips to be posted and commented on.
vim-brunch
vim-brunch (GitHub: drichard / vim-brunch) by David Richard is a vim-rails-inspired project management plugin for the HTML5 app development library, Brunch. It works a lot like vim-rails, for example, :Bmodel opens a model, and :Bcontroller opens a controller. It can be used to automate most (if not all) of Brunch development without leaving Vim.
In Vim 101: Repeating Commands I covered several ways of repeating a previous command. These techniques are great ways to speed up mundane editing operations. In the comments Richard Fabian suggested ; and , as well, which repeat the previously typed left-right motion: f, t, F or T.
The left-right motions are seriously worth adding to your permanent muscle memory, so let's recap how they work:
f{char} -- Move to the next {char}
F{char} -- Move to the previous {char}
t{char} -- Move before the next {char}
T{char} -- Move after the previous {char}
All of these motions take an argument as well. After one has been issued, pressing ; will repeat it in the same direction, while , repeats it in the opposite direction.
The title setting is off by default, so your terminal's title will be whatever the shell set it to. The reason I like setting it to the current filename is my statusline displays quite a lot already, so there often isn't space to display enough of the path of the file I'm editing.
EasyMotion (GitHub: Lokaltog / vim-easymotion) by Kim Silkebaekken (who also wrote Powerline) helps make Vim's motions easier to visualise by highlighting the possible choices for motions like f:
It takes the <number> out of <number>w or <number>f{char} by highlighting all possible choices and allowing you to press one key to jump directly to the target.
When Vim 7.0 was released, a tabbed interface was introduced. It works in both the text mode and GUI versions of Vim, but it doesn't take up any extra interface space if it isn't used.
Tabs are actually known as a "tab page". The help file for tab pages can be accessed with :help tabpage. Tabs can hold multiple split windows, so it's very easy to get into a complete mess of weird and wonderful window layouts.
Creating and Closing Tabs
When opening Vim, vim -p file1 file2 can be used to open several files, each with their own tab.