+
+" 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
+
+" 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
+
+" 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
+
+fun! Cycle_Number()
+ if &number
+ " Restore width.
+ if &t_WS =~ '^\e.'
+ let &columns=g:numbercols
+ endif
+ set nonumber
+ else
+ " Save width between number toggling.
+ if &t_WS =~ '^\e'
+ let g:numbercols=&columns
+ let &columns=&columns+5
+ endif
+ set number
+ endif
+endfun
+
+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>
+" 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>
+
+" 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
+
+" Add "previous tab" mapping as gb.
+map gb :tabPrev<CR>
+endif