X-Git-Url: http://git.iain.cx/?p=profile.git;a=blobdiff_plain;f=.vimrc;h=3fe567570ed27389df089f7a66916452634aa47f;hp=fe6ad8efa4afe936aac47c7bed910e99c490b051;hb=aeb7c0d7e22a3e2762e92b2f480e2ff6a392e78d;hpb=2355c937f216651eee5a13a4c9c9d3cf37997ac1 diff --git a/.vimrc b/.vimrc index fe6ad8e..3fe5675 100644 --- a/.vimrc +++ b/.vimrc @@ -1,5 +1,5 @@ """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Multi-version vimrc compatible with version 4 and above. vim:set fdm=marker: +" Multi-version vimrc compatible with version 4 and above. vim6:set fdm=marker: """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Note that "if | call Something() | endif" syntax is unsupported @@ -638,6 +638,11 @@ version 5.4 " Reuse windows when using sbuffer. se switchbuf=useopen +" Vim 5 requires a 'n setting for viminfo. +if ! &viminfo + se viminfo='100 +endif + " Allow persistent variable saving for localvimrc. se viminfo+=! @@ -662,13 +667,56 @@ fun! Has_Unicode() "{{{2 return 0 endfun "}}}2 +" Helper for status line. +" Show file encoding +fun! Show_Encoding() "{{{2 + if version < "600" + return "" + endif + + let l:enc = &fenc + let l:symbol = "" + if l:enc == "" + let l:enc = &enc + if l:enc == "" + return "" + endif + if bufname("%") == "" + if Has_Unicode() + let l:symbol = '•' + else + let l:symbol = '*' + endif + endif + endif + + if has("multi_byte") + if &bomb + if Has_Unicode() + let l:symbol = "☻" + else + let l:symbol = "@" + endif + endif + endif + + " Don't return anything if the encoding is utf-8. + if l:enc == "utf-8" + if l:symbol == "" + return "" + endif + endif + + return l:symbol . l:enc . "," +endfun "}}}2 + " Helper for status line. " Show space, underscore or dollar sign depending on list mode. fun! Show_List() "{{{2 call Iain_Vars() if w:iainlist == 0 " No list. - return " " + return "" elseif Has_Unicode() if w:iainlist == 1 " Just tabs. @@ -696,6 +744,15 @@ fun! Show_Case() "{{{2 endif endfun "}}}2 +" Helper for status line. +" Mark DOS buffers. +fun! Show_DOS() "{{{2 + if &ff == "unix" + return "" + endif + return &ff . "," +endfun "}}}2 + " Helper for status line. " Show the size of the tabstop. fun! Show_Tabstop() "{{{2 @@ -778,14 +835,85 @@ fun! Show_Bind() "{{{2 return "" endfun "}}}2 +" Helper for status line. +" Show marker if searchforward is unset. +fun! Show_SearchForward() "{{{2 + if version >= "702" + if ! v:searchforward + if Has_Unicode() + return "∆" + else + return "^" + endif + endif + endif + return "" +endfun "}}}2 + +" Helper for status line. +" Show marks set in cursor line. +fun! Show_Marks() "{{{2 + if ! exists("g:iainsigns") + return "" + endif + + let l:marks = "" + + let l:signs = g:iainsigns + let l:sign = "" + let l:cursorline = line(".") + while strlen(l:signs) + let l:sign = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=>-][^ ]\+') + let l:sign = substitute(l:sign, '^[A-Za-z]\+', "", "") + let l:ascii = matchstr(l:sign, '^:.') + let l:mark = substitute(l:sign, '^\(:.\)*[.=>-]', "", "") + if strlen(l:ascii) + let l:ascii = substitute(l:ascii, '^:', "", "") + else + let l:ascii = l:mark + endif + let l:ascii = substitute(l:ascii, '"', '\\"', "") + + if l:ascii == "o" + let l:line = "." + else + let l:line = "'" . l:ascii + endif + + " Ignore cursor line which will always match. + if l:line != "." + if l:cursorline == line(l:line) + let l:marks = l:marks . l:mark + endif + endif + + let l:signs = substitute(l:signs, '^[^ ]\+ *', "", "") + endwhile + + if l:marks == "" + return "" + else + return "M:" . l:marks . " " + endif +endfun "}}}2 + " Show the status line. fun! Show_StatusLine() "{{{2 if ! has("statusline") return endif call Iain_Vars() - let l:sl1='%2n\:\ %<%1*%f%0*\ [%{Show_List()}%{Show_Bind()}%{Show_Case()}%{Show_Tabstop()}%{Show_Paste()}%{Show_VirtualEdit()}%{Show_Undo()}%Y%M%R]%{Show_Alt()}\ ' - let l:sl3='L:%1*%4.6l%0*/%-4.6L\ C:%1*%3.6c%V%0*\ \|\ %P' + + " User{N} highlights %{N}*. + " Named highlight groups %#group% aren't available until Vim 7. + let l:normal = '%0*' + let l:bold = '%1*' + + " 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: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 let l:hexformat='0\x%02B' @@ -1122,13 +1250,13 @@ if has("autocmd") " Show signs by default. au Display VimEnter * call Cycle_Signs(0) endif -endif "}}}1 " move. nmap MoveLineHalfPageUp nmap MoveLineHalfPageDown vmap MoveBlockHalfPageUp vmap MoveBlockHalfPageDown +endif "}}}1 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Handle options only available in Vim 7 and above. @@ -1303,7 +1431,6 @@ let g:bufExplorerSplitOutPathName=0 " NERDcommenter. let g:NERDSpaceDelims=1 -endif "}}}1 " localvimrc. let g:localvimrc_persistent=1 @@ -1311,6 +1438,7 @@ let g:localvimrc_persistent=1 " Gitv. let g:Gitv_OpenHorizontal='auto' let g:Gitv_WipeAllOnClose=1 +endif "}}}1 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Handle options only available in Vim 7.2 and above.