fun! Number(resize) "{{{2
call Iain_Vars()
let &number = ! &number
+ if version >= 703
+ let &relativenumber = &number
+ endif
" Ensure we keep track of any extra columns even if we aren't resizing.
" This prevents confusion when number is set at startup.
call Mapping("-", "yyp:s/./-/g<CR>:let @/=''<CR>")
call Mapping("=", "yyp:s/./=/g<CR>:let @/=''<CR>")
+fun! Tab_Width(width) "{{{2
+ exec "set sw=" . a:width
+ exec "set ts=" . a:width
+endfun "}}}2
+
" Set 2-column tabs with \2.
-call Mapping("2", ":se ts=2<CR>:se sw=2<CR>")
+call Mapping("2", ":call Tab_Width(2)<CR>")
" Set 4-column tabs with \4.
-call Mapping("4", ":se ts=4<CR>:se sw=4<CR>")
+call Mapping("4", ":call Tab_Width(4)<CR>")
" Set 8-column tabs with \8.
-call Mapping("8", ":se ts=8<CR>:se sw=8<CR>")
+call Mapping("8", ":call Tab_Width(8)<CR>")
" Set 16-column tabs with \6.
-call Mapping("6", ":se ts=16<CR>:se sw=16<CR>")
+call Mapping("6", ":call Tab_Width(16)<CR>")
" Set 32-column tabs with \3.
-call Mapping("3", ":se ts=32<CR>:se sw=32<CR>")
+call Mapping("3", ":call Tab_Width(32)<CR>")
" Toggle paste mode with \p.
call Mapping("p", ":se paste!<CR>")
" Swap case-sensitivity with \c.
elseif Has_Unicode()
if w:iainlist == 1
" Just tabs.
- return "»"
+ return "⇥"
else
" Full list.
return "¶"
" Helper for status line.
" Show the size of the tabstop.
fun! Show_Tabstop() "{{{2
- return &ts
+ if &et
+ return &ts
+ else
+ if Has_Unicode()
+ return &ts . "↹"
+ else
+ return &ts . "\\"
+ fi
+ endif
endfun "}}}2
" Helper for status line.
endif
endfun "}}}2
+" Helper for status lines.
+" Show Space plugin command.
+fun! Show_Space() "{{{2
+ if exists("*GetSpaceMovement")
+ let l:ret = GetSpaceMovement()
+ if l:ret != ""
+ if Has_Unicode()
+ let l:ret = "▭" . l:ret . Show_SearchForward()
+ else
+ let l:ret = "[" . l:ret . Show_SearchForward() . "]"
+ endif
+ endif
+ return l:ret
+ else
+ return Show_SearchForward()
+ endif
+endfun "}}}2
+
" Show the status line.
fun! Show_StatusLine() "{{{2
if ! has("statusline")
" sl1 contains left-aligned stuff.
" sl2 contains stuff shown only when verbose mode is enabled.
" sl3 contains right-aligned stuff.
- let l:sl1='%2n\:\ %<' . l:bold . '%f' . l:normal . '\ [%{Show_Encoding()}%{Show_DOS()}%{Show_List()}%{Show_Bind()}%{Show_Case()}%{Show_Tabstop()}%{Show_Paste()}%{Show_VirtualEdit()}%{Show_Undo()}%Y%M%R%{Show_SearchForward()}]%{Show_Alt()}\ '
+ let l:sl1='%2n\:\ %<' . l:bold . '%f' . l:normal . '\ [%{Show_Encoding()}%{Show_DOS()}%{Show_List()}%{Show_Bind()}%{Show_Case()}%{Show_Tabstop()}%{Show_Paste()}%{Show_VirtualEdit()}%{Show_Undo()}%Y%M%R%{Show_Space()}]%{Show_Alt()}\ '
let l:sl3='%{Show_Marks()}L:' . l:bold . '%4.6l' . l:normal . '/%-4.6L\ C:' . l:bold . '%3.6c%V' . l:normal . '\ \|\ %P'
let l:hexformat='%b'
if b:iainhex
fun! Cycle_List() "{{{2
" Pretty UTF-8 listchars.
if Has_Unicode()
- let basic='tab:»·,trail:…,extends:«,precedes:»'
+ let basic='tab:⇥·,trail:…,extends:«,precedes:»'
let eol='eol:¶'
if version >= "700"
let basic=basic . ',nbsp:•'
call Iain_Vars()
let b:iainalt = ! b:iainalt
call Show_StatusLine()
-endfun "{{{2
+endfun "}}}2
" To be overridden later if applicable.
fun! Extra_Whitespace_Match() "{{{2
" Tab line.
fun! Show_TabLine() "{{{2
- let l:s = "%#TabLineFill#Tabs:"
+ let l:colwidth = &numberwidth
+ if g:marksigns
+ let l:colwidth += 2
+ endif
+ if &diff == 1
+ let l:colwidth += 2
+ endif
+ let l:fmt = printf("%%s%% %ds", l:colwidth)
+ let l:s = printf(l:fmt, "%#TabLineFill#", "Tabs ")
let l:i = 0
while l:i < tabpagenr("$")
" Remove persistent undo file with \U.
call Mapping("U", ":call <SID>Clear_Undo()<CR>")
-" Toggle gundo window with \g.
-call Mapping("g", ":call gundo#GundoToggle()<CR>")
+" Toggle Undotree window with \g.
+call Mapping("g", ":UndotreeToggle<CR>")
+" Switch to Undotree window with \G.
+call Mapping("g", ":UndotreeToggle<CR>")
+" Undotree gets focus.
+let g:undotree_SetFocusWhenToggle=1
+" Undotree uses context diff.
+let g:undotree_DiffCommand="diff -u"
+" Undotree bullet.
+if Has_Unicode()
+ let g:undotree_TreeNodeShape="•"
+endif
+" Undotree bindings emulate Gundo.
+fun! g:Undotree_CustomMap() "{{{2
+ nmap <buffer> k <plug>UndotreeGoNextState
+ nmap <buffer> j <plug>UndotreeGoPreviousState
+ nmap <buffer> K <plug>UndotreeGoNextSaved
+ nmap <buffer> J <plug>UndotreeGoPreviousSaved
+ nmap <buffer> <CR> <plug>UndotreeFocusTarget
+endfun "}}}2
+
" Use a persistent undo file if it exists.
fun! <SID>Check_Undo() "{{{2