+
+" 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
+
+" Make diffs vertical by default.
+se diffopt+=vertical
+
+" Set size of numbers column.
+se numberwidth=5
+
+" Add "previous tab" mapping as gb.
+map gb :tabPrev<CR>
+endif