Effective Vim
Friday, November 16th, 2007Being a fan of Steve Yegge, I was randomly reading some of his older writings and eventually chanced upon his post on “Effective Emacs”. Being a Vim guy, I wondered whether some of the tips he presents are useful for the Vim world as well.
Note: This is not a Vim vs Emacs thing, it is simply a porting of tips for Emacs to see whether the tips are useful for Vim users as well.
So here goes:
10 Specific Ways to Improve Your Productivity With Emacs, ported to Vim:
Item 1: Swap Caps-Lock and Control
This is a desktop-specific customization. However, I don’t think it is
required for Vim users, but it can be
useful.
Update: After using for a couple of days, I’m really starting to like this!
Item 2: Invoke M-x without the Alt key
Not relevant for Vim. Not a good start, first two tips are out…
Item 3: Prefer backward-kill-word over Backspace
This is a good tip. Normally, I would use bdw to achieve the same.
To map backspace to this command in normal mode, put this in
your vimrc: :map <bs> bdw.
To make it work in insert mode you can put :imap <bs> <esc>bdwa. I’m
sure there’s a better way to use just one command to do this, please
leave a comment if you know of a better way.
Update: You can also use ctrl-w in insert mode (see :help i_CTRL-W),
thanks to pimaniac.
Item 4: Use incremental search for Navigation
Use :set incsearch.
Press n to search forward and N to search backward.
Item 5: Use Temp Buffers
Run :new to get a new buffer (or alternately ctrl-w n).
To switch between buffers, use ctrl-w ctrl-w (yes, twice).
Use :q as usual to close the buffer (or alternately, ctrl-w q).
Item 6: Master the buffer and window commands
- To split window vertically, run
:vsp - To split window horizontally, run
:sp - To make all visible windows approximately equal height, run
ctrl-w = - To switch to other window, run
ctrl-w ctrl-wor use the directional keysctrl-w h/j/k/l - To delete other windows, use
ctrl-w oor run:only - To list-buffers, run
:ls(or even:filesor:buffers) - Dialog Boxes: The Root of All Evil - agree, Vim doesn’t need dialog boxes as well (at least in the non-gui mode)
- Buffers to the Rescue - Same thing for Vim, I think.
Item 7: Lose the UI
- Remove the menubar using
:set guioptions-=m. - Remove the toolbar using
:set guioptions-=T. - Similar options exist for the scrollbar, see
:help guioptions - Region selection can be easier in Vim using the visual mode, just
press
v, use the normal keys to move around, such as10jto move down by 10 lines, and then a command to work on that visual selection, such asdto delete it.
Item 8: Learn the most important help functions
The help in Vim is vast, see :help usr_toc to see the chapters of
the awesome reference manual.
Item 9: Master Emacs’s regular expressions
I agree, Friedl’s book is the authority on this. However, there are some good introductions to Vim regular expressions available.
Item 10: Master the fine-grained text manipulation commands
- Creating macros are easy in Vim. Press
qato start recording a macro called ‘a’, do all the commands you want to run, presqto stop recording. Then, run@ato repeat the recorded commands i.e. a macro. - Swapping two adjacent words, yeah, this can be better. I use
xpto swap characters anddwwPto swap words, but it doesn’t do fancy stuff like thetranspose-*functions. This can be an interesting plugin to write.
Tune in next time…
- Filling paragraphs can be done by setting
:set textwidth=80and runninggqapcommand to format ‘a’ ‘p’aragraph, or like me you can map the ‘Q’ key to run it ::nmap Q gwap. To make this work inside comments, make sure you:set formatoptions+=c. - gnuserv : I use It’s All Text! Firefox extension.
- Dired : There are plugins available with similar functionality
- Whitespace manipulation - plenty of ways such as
:set expandtab,:retab!,:help fo-table, etc. - nxml-mode : I haven’t used nxml-mode but I’m still looking for something like Emacs’ SGML-mode that works for Vim. I miss you, SGML-mode.
- picture-mode : Dr. Chip to the rescue with DrawIt.vim
- minibuffer management : Not sure what this is.
- effortless navigation : I think Vim has enough keys for this by
default. See
:help navigation. - region management : We can always choose the color scheme of choice
for the highlighted region, or change it ourselves, see
:help :highlight. - rectangle commands : Use
ctrl-v - emacs shells : We have
:shbut don’t know if Emacs does something more - align-regexp : Not sure what this is.
- frame initialization : I set Vim to always opens in full screen,
see
:help win16-maximized. Not sure how to do it in Linux yet, but in Gnome, I just press Alt-F10. - using the goal column : No idea…
- setting the fill column : Nada…
- OS settings and font : I like to customize Vim’s font and keep
trying different
fonts, currently
I’m using
:set guifont=Consolas:h14:cANSI - browsing and editing archives : I think Vim does this by default,
see
:help netrw. - advanced keybinding : see
:help :mapand:help keycodes - mastering the kill ring : I guess you can simulate this with
:echo @a, etc. - mastering Info : Not sure if this would be useful in Vim.
- using M-x customize : Not sure what this does.
- utility apps : It’s all in the plugins.
Summary: Porting good ideas is a good idea
I wonder why a search for Steve Yegge on Wikipedia points to Batman…


