Configuration options for gitv plugin.
[profile.git] / .vimrc
diff --git a/.vimrc b/.vimrc
index 19d9e77..7f1a8f7 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -76,12 +76,12 @@ inoremap <C-b> <C-p>
 inoremap <C-l> <C-n><C-p>
 
 " Swap jump keys.
-noremap ' `
-noremap ` '
+nnoremap ' `
+nnoremap ` '
 
 " Select previous widnow.
-noremap <C-w>^ <C-w>p
-noremap <C-w><C-^> <C-w>p
+nnoremap <C-w>^ <C-w>p
+nnoremap <C-w><C-^> <C-w>p
 "}}}1
 
 " Find stuff.
@@ -212,7 +212,6 @@ fun! Iain_Vars() "{{{2
   call Prep_Var("b:iainstatus", "'Fih'")
   call Prep_Var("g:iainextracolumnsnumber", "''")
   call Prep_Var("g:iainextracolumnslist", "''")
-  call Prep_Var("b:iaincul", 0)
   call Prep_Var("b:iainalt", 0)
   if has("signs")
     call Prep_Var("g:marksigns", 0)
@@ -796,7 +795,7 @@ endif "}}}1
 if version >= "600" "{{{1
 version 6.0
 
-if has("gui_win32")
+if has("win32") || has("win64")
   se encoding=utf-8
 endif
 
@@ -810,7 +809,14 @@ filetype indent on
 
 " Less intrusive syntax highlighting.
 if has("syntax")
-  syn enable
+  " The :syntax enable command tries to source the syntax.vim runtime script.
+  " Parsing this .vimrc will fail if for some reason the runtime doesn't
+  " exist, as could be the case if the binary was installed with no support
+  " files.  GNU On Windows is one example of an incomplete installation.
+  try
+    syn enable
+  catch
+  endtry
 endif
 
 " Set colours.
@@ -878,13 +884,13 @@ fun! <SID>Highlight_Signs(...) "{{{2
   let l:sign = ""
   let l:i = 0
   while strlen(l:signs)
-    let l:sign = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=-][^ ]\+')
+    let l:sign = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=>-][^ ]\+')
 
-    let l:name = substitute(l:sign, '[:.=-].*', "", "")
+    let l:name = substitute(l:sign, '[:.=>-].*', "", "")
     let l:var = tolower(l:name)
     let l:sign = substitute(l:sign, '^[A-Za-z]\+', "", "")
     let l:ascii = matchstr(l:sign, '^:.')
-    let l:mark = substitute(l:sign, '^\(:.\)*[.=-]', "", "")
+    let l:mark = substitute(l:sign, '^\(:.\)*[.=>-]', "", "")
     if strlen(l:ascii)
       let l:ascii = substitute(l:ascii, '^:', "", "")
     else
@@ -892,8 +898,14 @@ fun! <SID>Highlight_Signs(...) "{{{2
     endif
     let l:ascii = substitute(l:ascii, '"', '\\"', "")
 
+    if l:ascii == "o"
+      let l:line = "."
+    else
+      let l:line = "'" . l:ascii
+    endif
+
     call <SID>Prep_Sign(l:var)
-    exe "let " . l:var . " = <SID>Place_Sign(" . l:i . ", line(\"'" . l:ascii . "\"), b:sign" . l:var . ", \"Mark" . l:name . "\")"
+    exe "let " . l:var . " = <SID>Place_Sign(" . l:i . ", line(\"" . l:line . "\"), b:sign" . l:var . ", \"Mark" . l:name . "\")"
     let l:i = l:i + 1
 
     let l:signs = substitute(l:signs, '^[^ ]\+ *', "", "")
@@ -918,13 +930,20 @@ fun! <SID>Cycle_Signs(resize) "{{{2
     " Signs with Type '=' will be highlighted with the MarkSign group.
     " Signs with Type '-' will be highlighted with the MarkLine group.
     " Signs with Type '.' will be highlighted with the MarkDot group.
+    " Signs with Type '>' will be highlighted with the MarkArrow group.
     " Define the Mark where Symbol is not also the mark name, eg "']".
+    let g:iainsigns = "Less=< Greater=> Left=( Right=) SquareLeft=[ SquareRight=] BraceLeft={ BraceRight=} a-a b-b c-c d-d e-e f-f A-A B-B C-C D-D E-E F-F"
     if Has_Unicode()
-      let g:iainsigns = "Dash:'=’ Dot:..• Quote:\"=” Caret:^.ʌ"
+      let g:iainsigns = g:iainsigns . " Quote:\"=” Dash:'=’ Caret:^.ʌ Dot:..•"
+      if version < "704"
+        let g:iainsigns = g:iainsigns ." Cursor:o>▶"
+      endif
     else
-      let g:iainsigns = "Dash=' Dot:..* Quote=\" Caret.^"
+      let g:iainsigns = g:iainsigns . " Quote=\" Dash=' Caret.^ Dot:..*"
+      if version < "704"
+        let g:iainsigns = g:iainsigns ." Cursor>o"
+      endif
     endif
-    let g:iainsigns = g:iainsigns . " Less=< Greater=> Left=( Right=) SquareLeft=[ SquareRight=] BraceLeft={ BraceRight=} a-a b-b c-c d-d e-e f-f A-A B-B C-C D-D E-E F-F"
   endif
 
   if g:marksigns
@@ -933,14 +952,34 @@ fun! <SID>Cycle_Signs(resize) "{{{2
     let l:signs = g:iainsigns
     let l:sign = ""
     while strlen(l:signs)
-      let l:sign = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=-][^ ]\+')
-
-      let l:sign = substitute(l:sign, ':.', "", "")
-      let l:sign = substitute(l:sign, '=', " texthl=MarkSign text=", "")
-      let l:sign = substitute(l:sign, '\.', " texthl=MarkDot text=", "")
-      let l:sign = substitute(l:sign, '-', " texthl=MarkLine linehl=MarkLine text=", "")
+      let l:sign = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=>-][^ ]\+')
+
+      let l:name = substitute(l:sign, '[:.=>-].*', "", "")
+      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, '^:', "", "")
+        let l:ascii = matchstr(l:ascii, '^.')
+      else
+        let l:ascii = l:mark
+      endif
+      let l:ascii = substitute(l:ascii, '"', '\\"', "")
+      let l:type = substitute(l:sign, '^:.', "", "")
+      let l:type = matchstr(l:type, '^.')
+
+      let l:hl = ""
+      if l:type == "="
+        let l:hl = "texthl=MarkSign text="
+      elseif l:type == "."
+        let l:hl = "texthl=MarkDot text="
+      elseif l:type == "-"
+        let l:hl = "texthl=MarkLine text="
+      elseif l:type == ">"
+        let l:hl = "texthl=MarkArrow text="
+      endif
 
-      exe "sign define Mark" . l:sign
+      exe "sign define Mark" . l:name . " " . l:hl . l:mark
 
       let l:signs = substitute(l:signs, '^[^ ]\+ *', "", "")
     endwhile
@@ -1070,6 +1109,12 @@ if has("autocmd")
 endif
 endif "}}}1
 
+" move.
+nmap <A-u> <Plug>MoveLineHalfPageUp
+nmap <A-d> <Plug>MoveLineHalfPageDown
+vmap <A-u> <Plug>MoveBlockHalfPageUp
+vmap <A-d> <Plug>MoveBlockHalfPageDown
+
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Handle options only available in Vim 7 and above.
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -1144,22 +1189,6 @@ fun! Show_GUITabLine() "{{{2
   return l:s
 endfun "}}}2
 
-" Toggle highlighting cursor line when focus changes.
-fun! <SID>ToggleCursorLine() "{{{2
-  call Iain_Vars()
-
-  if b:iainstatus =~# "H" && b:iainstatus =~# "I"
-    " We are held in insert mode.
-    if b:iainstatus =~# "f"
-      " And focus was lost.
-      let b:iaincul = getbufvar("", "&cursorline")
-      setlocal cursorline
-    elseif ! b:iaincul
-      setlocal nocursorline
-    endif
-  endif
-endfun "}}}2
-
 " Handle searching in a BufExplorer window.
 fun! <SID>BufExplorer_Search(n) "{{{2
   if a:n == 0
@@ -1211,11 +1240,8 @@ if has("autocmd")
   au StatusLine InsertEnter * call Highlight_StatusLine("I")
   au StatusLine InsertLeave * call Highlight_StatusLine("i")
 
-  if has("syntax")
-    au Display FocusGained,FocusLost * call <SID>ToggleCursorLine()
-  endif
-
   if has("signs")
+    au Signs CursorHoldI * call <SID>Highlight_Signs()
     au Signs InsertEnter * call <SID>Highlight_Signs()
     au Signs InsertLeave * call <SID>Highlight_Signs()
   endif
@@ -1266,6 +1292,10 @@ endif "}}}1
 " localvimrc.
 let g:localvimrc_persistent=1
 
+" Gitv.
+let g:Gitv_OpenHorizontal='auto'
+let g:Gitv_WipeAllOnClose=1
+
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " Handle options only available in Vim 7.2 and above.
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -1326,6 +1356,9 @@ call Mapping("u", ":call <SID>Cycle_Undo()<CR>:<CR>")
 " Remove persistent undo file with \U.
 call Mapping("U", ":call <SID>Clear_Undo()<CR>:<CR>")
 
+" Toggle gundo window with \g.
+call Mapping("g", ":call gundo#GundoToggle()<CR>:<CR>")
+
 " Use a persistent undo file if it exists.
 fun! <SID>Check_Undo() "{{{2
   if filereadable(undofile(expand("%")))
@@ -1401,6 +1434,24 @@ if has("autocmd")
     au Display WinEnter * if &diff | se cursorbind | endif
   endif
 endif
+
+" Mapping to reload the gundo window.
+if has("autocmd")
+  au Mode BufEnter * if &ft == "gundo" | try | nnoremap <silent> <buffer> <unique> r :call gundo#GundoToggle()<CR>:call gundo#GundoToggle()<CR> | catch | endtry | endif
+endif
+
+endif "}}}1
+"
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Handle options only available in Vim 7.4 and above.
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+if version >= "704" "{{{1
+version 7.4
+
+if has("syntax")
+  se cursorline
+endif
+
 endif "}}}1
 
 " Resize after startup.