Update signs when the cursor is held.
[profile.git] / .vimrc
diff --git a/.vimrc b/.vimrc
index 6de8038..426e394 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -885,13 +885,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
@@ -899,8 +899,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, '^[^ ]\+ *', "", "")
@@ -925,12 +931,13 @@ 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 = g:iainsigns . " Quote:\"=” Dash:'=’ Caret:^.ʌ Dot:..•"
+      let g:iainsigns = g:iainsigns . " Quote:\"=” Dash:'=’ Caret:^.ʌ Dot:..• Cursor:o>▶"
     else
-      let g:iainsigns = g:iainsigns . " Quote=\" Dash=' Caret.^ Dot:..*"
+      let g:iainsigns = g:iainsigns . " Quote=\" Dash=' Caret.^ Dot:..* Cursor>o "
     endif
   endif
 
@@ -940,12 +947,12 @@ 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 = matchstr(l:signs, '^[A-Za-z]\+\(:.\)*[.=>-][^ ]\+')
 
-      let l:name = substitute(l:sign, '[:.=-].*', "", "")
+      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, '^\(:.\)*[.=-]', "", "")
+      let l:mark = substitute(l:sign, '^\(:.\)*[.=>-]', "", "")
       if strlen(l:ascii)
         let l:ascii = substitute(l:ascii, '^:', "", "")
         let l:ascii = matchstr(l:ascii, '^.')
@@ -963,6 +970,8 @@ fun! <SID>Cycle_Signs(resize) "{{{2
         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:name . " " . l:hl . l:mark
@@ -1247,6 +1256,7 @@ if has("autocmd")
   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