These text-objects can be combined with other commands. For example, vic will visually select a column. The author has made an animated gif that demonstrates the plugin with some Ruby code.
You're happily using Vim, slowly mastering file navigation, split windows and tabs, search and replace, and then you discover a hot new .vimrc on Hacker News that includes lots of commands like this:
noremap <Leader>W :w !sudo tee % > /dev/null
What the devil is <Leader>? Well, in this example it simply means typing \W (backslash then w) in Normal mode will save the current file using the sudo command. Does that mean <Leader> means backslash? Well, not quite. The <Leader> key is a reference to a specific key defined by the mapleader variable. A lot of people change to comma because they find it easier to type:
let mapleader=","
The mapleader variable is easy to change, and if you always remember to map keys with <Leader> then you'll avoid confusing your own customisation with Vim's default keyboard shortcuts.
The NERD Tree (GitHub: scrooloose / nerdtree) by Martin Grenfell is a popular file system browser. If you're using it simply to browse and select files like a typical GUI IDE, then it's worth spending a bit of time going over the documentation, because this plugin does a lot more than displaying a tree of files and directories.
With that in mind, here's a guide to my favourite features and keyboard commands.
Mirroring
If you want the tree to appear in the same state across multiple tabs, then type :NERDTreeMirror. Any subsequent changes will be reflected in each mirrored instance. This gives the feel of a traditional IDE, but be wary of relying on it too much -- trying to use tabs this way is seen as somewhat of an anti-pattern.
vim-pipe (GitHub: krisajenkins / vim-pipe) by Kris Jenkins helps improve workflow by allowing a buffer to be run through a frequently used command whenever <LocalLeader>r is pressed. This could be a syntax checker, or something that renders Markdown, or shell to run a database query.
The author has provided a terminal-friendly example using a Markdown parser and lynx:
Query Command Complete (GitHub: caio / querycommandcomplete.vim, License: PD) by Caio Romão adds support for completion suggestions from any external command. The author's example is email address completion by using it as a Mutt query_command wrapper.
Vim's documentation is amazingly detailed and consistent. It's usually the first place I look for help, before even lazily typing in a query into a search engine. Admittedly, the documentation can be daunting for beginners. Let's address that now!
Help is Context Sensitive
Pressing escape to ensure Vim's in Normal mode and then typing :help and return will display the main Vim help page. Typing :help subject will search for a given subject. The help file is opened and displayed in a read-only window, usually in a split window at the top of the screen. This window can be closed by entering :q, just like any other file.
Searching for subjects is context sensitive. If you need help on a Visual mode command, then prepend it with v_. Similarly, Insert mode commands are prepended with i_ -- for example, :help i_CTRL-P will display the help for completion.
Most IDEs have a graphical drawer that displays a list of files and folders in a project. Although this is a slow way to navigate between files (hunting for a file visually rather than searching), it provides a useful representation of the project.
The Unix tree program is a command-line friendly alternative. It recursively lists files and directories, supports colourised output, and is available as a package on most systems.
neocomplcache (GitHub: Shougo / neocomplcache, License: MIT) by Shougo Matsushita is a keyword completion plugin. It supports configurable completion for quick matching, snippets, filenames, and registers. It also enhances omni completion, and works with VimShell.
The author's readme on GitHub has configuration examples and screenshots of each feature.
Vim has context-sensitive completion, based on the current mode. When in Insert mode, there's actually a whole slew of completion types (:help ins-completion). The one most people know is CTRL-P: keyword completion (:help i_CTRL-P). This finds the previous match for a word that starts with the characters in front of the cursor -- CTRL-N is the opposite and will find the next match. Pressing the return key will insert the match, and pressing CTRL-P/N again will cycle through the completion menu.
This example shows the difference: typing eng then CTRL-P matches engines, while CTRL-N matches engine:
Somebody recently asked me if I use split windows in Vim. The answer is of course an emphatic "Yes!", but why?
It actually depends on the work I'm doing. When writing prose, I'll typically use a single window and only split it if I need to refer to another file without losing my place.
When writing code, however, I'm likely to always split windows. For example: a vertical split for a file and its associated unit test, and perhaps later an additional set of horizontal splits for associated view code (HTML templates or similar).