Well, you need to replace all characters for the current buffer so that they do not appear. In recent Vims (e.g. newer than 7.3.596) you can simply use :sign unplace * .
You can take my plugin https://github.com/chrisbra/SaveSigns.vim to save these characters in a temporary file (which will actually create a Vim script to be able to replace all characters. Using this plugin, you can write a custom function to switch displayed characters.
Something like this might work for you:
fu! MySignsToggle() if !has("signs") || empty(bufname('')) return endif if !exists("s:signfile") let s:signfile = tempname().'_' endif redir =>a|exe "sil sign place buffer=".bufnr('')|redir end let signs = split(a, "\n")[1:] if !empty(signs) let bufnr = bufnr('') exe ":sil SaveSigns!" s:signfile.bufnr('') if bufnr('') != bufnr exe "noa wq" endif sign unplace * elseif filereadable(s:signfile.bufnr('')) exe "so" s:signfile.bufnr('') call delete(s:signfile.bufnr('')) endif endfu
source share