Archive for the ‘Vim’ Category

Effective Vim

Friday, November 16th, 2007

Being 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-w or use the directional keys ctrl-w h/j/k/l
  • To delete other windows, use ctrl-w o or run :only
  • To list-buffers, run :ls (or even :files or :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 as 10j to move down by 10 lines, and then a command to work on that visual selection, such as d to 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 qa to start recording a macro called ‘a’, do all the commands you want to run, pres q to stop recording. Then, run @a to repeat the recorded commands i.e. a macro.
  • Swapping two adjacent words, yeah, this can be better. I use xp to swap characters and dwwP to swap words, but it doesn’t do fancy stuff like the transpose-* functions. This can be an interesting plugin to write.

Tune in next time…

  1. Filling paragraphs can be done by setting :set textwidth=80 and running gqap command 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.
  2. gnuserv : I use It’s All Text! Firefox extension.
  3. Dired : There are plugins available with similar functionality
  4. Whitespace manipulation - plenty of ways such as :set expandtab, :retab!, :help fo-table, etc.
  5. 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.
  6. picture-mode : Dr. Chip to the rescue with DrawIt.vim
  7. minibuffer management : Not sure what this is.
  8. effortless navigation : I think Vim has enough keys for this by default. See :help navigation.
  9. region management : We can always choose the color scheme of choice for the highlighted region, or change it ourselves, see :help :highlight.
  10. rectangle commands : Use ctrl-v
  11. emacs shells : We have :sh but don’t know if Emacs does something more
  12. align-regexp : Not sure what this is.
  13. 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.
  14. using the goal column : No idea…
  15. setting the fill column : Nada…
  16. 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
  17. browsing and editing archives : I think Vim does this by default, see :help netrw.
  18. advanced keybinding : see :help :map and :help keycodes
  19. mastering the kill ring : I guess you can simulate this with :echo @a, etc.
  20. mastering Info : Not sure if this would be useful in Vim.
  21. using M-x customize : Not sure what this does.
  22. 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

Lookup

Saturday, August 25th, 2007

Most of my writing inside the browser is done with the combination of the It’s All Text extension and Vim. During this writing, I use words whose meaning I know vaguely but don’t know the exact usage, and in such cases, I usually open a new browser window and look up the meaning of the word in an online dictionary. This process of looking up the dictionary meaning was getting rather tedious, so I wrote a small Vim plugin today to do this job with a simple command.

To use the plugin, first install BeautifulSoup. Then, get my lookup.vim script and copy it to ~/.vim/plugin/.. See the new version’s installation instructions, it now uses John Goerzen’s dict client implementation in Python.

Next time you use Vim, just place your cursor over any word and run :Lookup, and you’ll see something like this:

lookup.vim screenshot

Since, this is the only command starting with L on my Vim installation, I just end up running :L. Of course, you can always create your own keyboard shortcuts to make it easier.

Update: Based on the comments, I’ve updated the script to now use the DICT protocol and talks to some servers. This avoids screen-scraping, is much faster to use, allows me to now use both a dictionary and a thesaurus which is very very handy because I can see what other words I can use, and of course, doesn’t violate any TOS (which screen-scraping could amount to).

How to use Vim with Firefox

Wednesday, April 26th, 2006

If you’re a Vim user like me, you would’ve wished many a time that you could use Vim to edit text in Firefox. Too bad, the Mozex extension doesn’t work anymore.

Thanks to Samuel Wright, I have now discovered another way to achieve the same - using the ViewSourceWith extension.

I have put up the set of steps on my wiki on how to use Vim to edit text in Firefox.

Note : This works only for plain text entries. It will not work for rich text formatting options such as GMail or Yahoo! Mail compose page.

GVim

Friday, March 24th, 2006

A message by Bram on vim-announce:

The past few years many people have sponsored my work on Vim. Now version 7 is nearing completion, beta testing will start soon, very soon. A big thanks to all who supported me! I would not have been able to do this without your help.

But things are going to change. I have accepted a job offer and will go back to a full time job in a few months. To avoid speculation and rumours: I am going to work for Google in Zurich. Fortunately I can spend part of my time on Vim. But it will obviously be less than the past few years when I was working 150% of my time on Vim.

I will no longer need sponsorship to survive. Therefore, starting the end of March, all money given for Vim sponsorship and registration will go to the project in Kibaale, Uganda. And no, this is not an April fools joke.

The voting will continue as before. And seeing people give money will motivate me to keep working on Vim. The children need the help much more than me anyway. Thus please keep sending money!

P.S. Yes, I have donated to Vim before.

Connect the text

Monday, May 9th, 2005

A while ago I was thinking about using a wiki to organize my notes, but I don’t know if even that scenario would be useful for quick note taking because of the conversion from wiki syntax to HTML everytime which causes a lag when saving the notes.

I have found a simple and effective solution (next to paper and pen, which I would always prefer) by using VIM with the Universal Text Linking plugin and the Markdown syntax file.

As the name indicates, the Universal Text Linking (or UTL for short) plugin allows you to create URLs that you can access like real hyperlinks (within VIM) and even opens a browser or media player depending on the type of file you link to.

I like using Markdown syntax because I find it to be the most cleanest and simplest of semantic text markup styles that I have used. So, the Markdown syntax highlighting makes the text even more pleasant to read.

Let me give an example on how I created a plain text wiki:

vim_utl_mkd

I have one central file which acts like an index to the other documents and this is the first file I always open. I also put in any critically urgent, etc. stuff in this file, so I’m always reminded of it.

I have unimaginatively named this file as ‘plan’ and here are the contents of that file:

  • [ProjectA]
  • [MeetOnSaturday]

From here, I just press \gu on [ProjectA] and it takes me to that file. So, I read or make changes to the notes on my top-secret project and then I just hit Ctrl-O and I’m back to my ‘plan’ file which I started with.

If you run set filetype=mkd for the file, you will get Markdown syntax highlighting. Better yet, just put a modeline such as # vim: filetype=mkd as the last line of the file and VIM will automatically do this for you everytime.

In effect, you have a wiki using just plain text!

I think I must be catching the Wikiphilia.

Sidebar: I have let mapleader="," in my vimrc file, so I press ,gu to open links. I find the comma easier to type than the backslash.

Editing Away

Sunday, March 14th, 2004

A text editor is one of the most important tools in the kit of every programmer. It is the starting point for us when we intend to write programs or anything else. It is therefore important to understand the strengths and weaknesses of our editor as well as being able to utilise the editor to its fullest potential. One such good editor is VIM. Bram Moolenaar, the creator of VIM, discusses the Seven habits of effective text editing and uses VIM as an example of showing how to do things.