如果您使用的是Vim 8.0或更新版本(或NeoVim),现在这是一个简单的设置:
$ vim "+help signcolumn" "+only"
Run Code Online (Sandbox Code Playgroud)
例如,
:set scl=no " force the signcolumn to disappear
:set scl=yes " force the signcolumn to appear
:set scl=auto " return the signcolumn to the default behaviour
Run Code Online (Sandbox Code Playgroud)
那么,您需要取消当前缓冲区的所有符号以使它们不显示.使用最近的Vims(例如更新的版本7.3.596),您可以简单地使用:sign unplace *.
你可以把我的插件https://github.com/chrisbra/SaveSigns.vim保存这些迹象到一个临时文件(这实际上将创建一个Vim脚本,要能够代替所有的迹象.使用插件,您可以编写自定义函数以切换显示符号.
这样的事可能适合你:
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
Run Code Online (Sandbox Code Playgroud)
根据@elliottcable的回答(非常感谢!),我编写了一个简单的切换函数并将其映射到<Leader>2
nnoremap <Leader>2 :call ToggleSignColumn()<CR>
" Toggle signcolumn. Works on vim>=8.1 or NeoVim
function! ToggleSignColumn()
if !exists("b:signcolumn_on") || b:signcolumn_on
set signcolumn=no
let b:signcolumn_on=0
else
set signcolumn=number
let b:signcolumn_on=1
endif
endfunction
Run Code Online (Sandbox Code Playgroud)
或者,如果您还想切换行号,只需修改映射行:
nnoremap <Leader>2 :set number!<CR>:call ToggleSignColumn()<CR>
Run Code Online (Sandbox Code Playgroud)
希望它有帮助:)