15

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

来自 Vim 帮助:

当为文件定义符号时,Vim 会自动添加一列两个
字符来显示它们。当最后一个符号未放置时,该列
再次消失。

是否可以在仍然定义标志的情况下删除该列?

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

4

5 回答 5

18

如果您使用的是 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
于 2017-10-08T23:13:33.090 回答
9

更新自补丁7.4.2201以来,您可以使用“signcolumn”选项来禁用显示标志。查看文档:h 'signcolumn'

好吧,您需要取消放置当前缓冲区的所有标志以使其不显示。对于最近的 Vim(例如比 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
于 2013-08-19T20:42:23.547 回答
4

基于@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

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

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

希望它有帮助:)

于 2018-12-26T10:44:11.353 回答
3

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

于 2013-08-23T03:01:48.157 回答
2

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

不幸的是,如果不先移除所有放置的标志,就无法切换标志列。因此,您必须使用列表/字典来保留标志的 ID/行号。

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

于 2013-08-19T17:30:15.817 回答