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: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="
+      endif
 
-      exe "sign define Mark" . l:sign
+      exe "sign define Mark" . l:name . " " . l:hl . l:mark
 
       let l:signs = substitute(l:signs, '^[^ ]\+ *', "", "")
     endwhile