Vim标志栏切换

时间:2013-08-19 17:07:00

标签: vim

在Vim中定义标志时,屏幕左侧会出现一列。

来自Vim的帮助:

  

当为文件定义符号时,Vim会自动添加两列的列   显示它们的字符。当最后一个标志未放置时,列为
  又消失了。

是否可以在仍有定义符号的情况下移除色谱柱?

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

5 个答案:

答案 0 :(得分:8)

更新由于修补程序7.4.2201,您可以使用'signcolumn'选项禁用显示标记。请查看文档:h 'signcolumn'

嗯,您需要取消当前缓冲区的所有符号以使其不显示。使用最近的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

答案 1 :(得分:5)

如果您使用的是Vim 8.0或更新版本(或NeoVim),现在这是一个简单的设置:

$ vim "+help signcolumn" "+only"

例如,

: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

答案 2 :(得分:3)

如果你愿意等待Bram在他的TODO列表上找到它,或者愿意自己修补/编译Vim,最近提交了一个补丁,允许使用新的'signcolumn'选项。 https://groups.google.com/d/topic/vim_dev/CrBId6DRbvo/discussion

答案 3 :(得分:2)

嗯,您区分已定义的(描述某个标志的外观)和已放置的标志(实际显示在符号列中)。

不幸的是,没有方法可以切换标志列而不首先删除所有放置的标志。因此,您必须使用list / dict来保留符号的ID /行号。

(无耻的插件:https://github.com/mhinz/vim-signify

答案 4 :(得分:1)

基于@elliottcable的回答(非常感谢!),我编写了一个简单的切换函数并将其映射到<Leader>2

nnoremap <Leader>2 :call ToggleSignColumn()<CR>

" Toggle signcolumn. Works only on vim>=8.0 or NeoVim
function! ToggleSignColumn()
    if !exists("b:signcolumn_on") || b:signcolumn_on
        set signcolumn=no
        let b:signcolumn_on=0
    else
        set signcolumn=auto
        let b:signcolumn_on=1
    endif
endfunction

或者,如果您也想切换行号,只需修改映射行:

nnoremap <Leader>2 :set number!<CR>:call ToggleSignColumn()<CR>

希望这会有所帮助:)