+
+" Show the status line for the first time.
+call Show_StatusLine()
+endif
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Handle options only available in Vim 6 and above.
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+if version >= "600"
+version 6.0
+
+" Track changing number mode.
+let g:numbercols=&columns
+let g:numberchanges=0
+
+" Less intrusive syntax highlighting.
+syn enable
+
+" Nice GUI colour.
+if has("gui_running")
+ se guifont=Bitstream\ Vera\ Sans\ Mono\ 12
+ colo darkblue
+endif
+if has("win32")
+ se guifont=Bitstream_Vera_Sans_Mono:h10:cANSI
+endif
+
+" Expand window when doing a vertical diff.
+if &diff
+ let &columns = 164
+endif
+
+" Status bar matches the colour.
+highlight StatusLine guifg=white guibg=blue ctermbg=white ctermfg=blue
+
+" Numbers in blue.
+highlight LineNr term=underline cterm=bold guifg=blue ctermfg=blue
+
+" Make * and # work the way you expect in visual mode.
+vnoremap * y/\V<C-R>=substitute(escape(@@,"/\\"),"\n","\\\\n","ge")<CR><CR>
+vnoremap # y?\V<C-R>=substitute(escape(@@,"?\\"),"\n","\\\\n","ge")<CR><CR>
+
+" Change list mode.
+fun! Cycle_List()
+ let basic='tab:\\_,trail:_,extends:<,precedes:>'
+ call Iain_Vars()
+ let b:iainlist = b:iainlist + 1
+ if b:iainlist > 2
+ let b:iainlist = 0
+ endif
+ if b:iainlist == 0
+ set nolist
+ elseif b:iainlist == 1
+ exec "set lcs=" . basic
+ set list
+ else
+ exec "set lcs=" . basic . ",eol:$"
+ set list
+ endif
+endfun
+
+" Cycle between hex and decimal display of toolbar stuff.
+fun! Cycle_HexStatusLine()
+ call Iain_Vars()
+ let b:iainhex = ! b:iainhex
+ call Show_StatusLine()
+endfun
+
+" Cycle verbose display of toolbar stuff.
+fun! Cycle_VerboseStatusLine()
+ call Iain_Vars()
+ let b:iainverbose = ! b:iainverbose
+ call Show_StatusLine()
+endfun
+
+" Cycle between number mode.
+" FIXME: Toggling in a split window doesn't work properly. We need to track
+" the number of windows and number modes. Something for later...
+" Perhaps have a redraw callback that checks width and original column number.
+fun! Cycle_Number()
+ if &number
+ " Restore width.
+ if &t_WS =~ '^\e.'
+ " Track changes.
+ let g:numberchanges=g:numberchanges-1
+ if g:numberchanges<0
+ g:numberchanges=0
+ endif
+
+ " Change size back if this was the last window.
+ if g:numberchanges == 0
+ let &columns=g:numbercols
+ endif
+ endif
+ set nonumber
+ else
+ " Save width between number toggling.
+ if &t_WS =~ '^\e'
+ " Expand if this was the first change.
+ if g:numberchanges == 0
+ let g:numbercols=&columns
+ if version >= 700
+ " Expand column by our preferred width.
+ let &columns=&columns+&numberwidth
+ else
+ " Vim 6 hardcodes width to 8.
+ let &columns=&columns+8
+ endif
+ endif
+
+ " Track changes.
+ let g:numberchanges=g:numberchanges+1
+ endif
+ set number
+ endif
+endfun
+
+" Toggle case-sensitivity.
+fun! Invert_Case()
+ let &ic = ! &ic
+endfun
+
+" We'll use Q for various commands. Unmap it.
+map Q <Nop>
+
+" Change to ts=2 with Q2.
+map Q2 :se ts=2<CR>:<CR>
+" Change to ts=4 with Q4.
+map Q4 :se ts=4<CR>:<CR>
+" Change to ts=8 with Q8.
+map Q8 :se ts=8<CR>:<CR>
+" Change to ts=16 with Q6.
+map Q6 :se ts=16<CR>:<CR>
+" Change to ts=32 with Q3.
+map Q3 :se ts=32<CR>:<CR>
+" Change foldmethod with Qf.
+map Qf :se foldenable!<CR>:<CR>
+" Toggle paste mode with Qp.
+map Qp :se paste!<CR>:<CR>
+" Swap hex/decimal statusline with Qx
+map Qx :call Cycle_HexStatusLine()<CR>:<CR>
+" Change statusline verbosity with Qv
+map Qv :call Cycle_VerboseStatusLine()<CR>:<CR>
+" Swap case-sensitivity with Qc.
+map Qc :call Invert_Case()<CR>:<CR>
+" Cycle list styles with Ql.
+map Ql :call Cycle_List()<CR>:<CR>
+" Change number mode with Qn.
+map Qn :call Cycle_Number()<CR>:<CR>
+" Toggle tags with Qt.
+map Qt :Tlist<CR>
+" Clear search pattern with Q/.
+map Q/ :let @/=""<CR>:<CR>
+
+" Leaving Perl mode.
+fun! PerlMode_unmap()
+ set cinkeys=oldcinkeys
+ set cinwords=oldcinwords
+ set foldmethod=manual
+endfun
+endif
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Handle options only available in Vim 7 and above.
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+if version >= "700"
+version 7.0
+
+" Set size of numbers column.
+se numberwidth=5
+
+" Add "previous tab" mapping as gb.
+map gb :tabPrev<CR>
+endif