如何禁用在特定文件类型的 Tagbar 中显示可见性符号?

How to disable showing visibility symbols in Tagbar for a specific filetype?

我希望 Python 文件的 g:tagbar_show_visibility 设置为 '0',因为 Python 中没有 public/protected/private。如何以这种方式配置 Vim?

要手动执行操作,请执行此操作:

:TagbarClose
:let g:tagbar_show_visibility = 0
:TagbarOpen

您可以将以下行添加到您的 vimrc 以使其自动生成:

au BufRead *.py :let g:tagbar_show_visibility = 0

自动命令 (au) 针对特定事件执行命令。对于这个特定的例子,它在 vim 读取它们的那一刻将缓冲区 .py 的变量设置为 0。

编辑

我的解决方案效果不佳。由于变量 g:tagbar_show_bisibility 是全局的。 Tagbar 插件似乎在调用 TagbarOpen 时读取它。所以更好的方法是使用一个函数来打开 Tagbar,比如 TagbarOpen2 之类的。该函数将检查当前缓冲区的文件类型并相应地设置可见性变量。

EDIT2

我制作了一个脚本,可以在您每次进入缓冲区时设置可见性。然后为了刷新 Tagbar,我连续两次使用 TagbarToggle。这有点烦人,但这是我得到的最好的。如果你花点时间,也许你可以想出更好的办法来避免忽悠。

如果改进此脚本,请分享。

function! TagbarUpdate()
    if (&ft == 'tagbar')
        return
    endif
    let g:tagbar_show_visibility = 1
    if (&ft == 'python')
        let g:tagbar_show_visibility = 0
    endif
    exec ":TagbarToggle"
    exec ":TagbarToggle"
endfunction

au! BufEnter * :call TagbarUpdate()

您可以为特定的文件类型自定义ctagsargs,使ctags不首先输出标签的'visibility'信息,例如:

let g:tagbar_type_python = {
    \ 'ctagsargs' : '-f - --excmd=pattern --fields=nksSmt'
\ }

此处重要的一点是 --fields 选项,它指定每个标签要包含的字段。