Vim标志栏切换

aar*_*ren 9 vim

在Vim中定义符号时,屏幕左侧会出现一列.

来自Vim的帮助:

当为文件定义符号时,Vim将自动添加一个包含两个
字符的列以显示它们.当最后一个符号未放置时,该列将
再次消失.

是否有可能在仍有标志定义的情况下移除色谱柱?

理想情况下,我想打开/关闭列.

ELL*_*BLE 9

如果您使用的是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)


Chr*_*ndt 8

那么,您需要取消当前缓冲区的所有符号以使它们不显示.使用最近的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)


che*_*rot 6

根据@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)

希望它有帮助:)