Tagbar 插件适用于 vim 但不适用于 neovim
Tagbar plugin works in vim but not neovim
我的 tagbar 插件在 vim 中运行良好,但在 neovim 中没有显示标签。
当我在两者中使用 TagbarDebug
时,我可以看到当 vim 中的 运行 时 ctags 输出正常,但在 neovim 中,tagbardebug.log.ctags_out
仅包含以下行:
^[[31;01m'^[[39;00m^[[31;01m/usr/local/bin/ctags-f---format=2--excmd=pattern--fields=nksSaf--extra=--file-scope=yes--sort=no--append=no-V--language-force=python--python-kinds=icfmv/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/nvimoU8Oxr/1.py^[[39;00m^[[31;01m'^[[39;00m
从tagbardebug.log
,我可以看出两者对ctags的调用略有不同。在 vim 中,日志有:
Calling shell to execute: "('/usr/local/bin/ctags' '-f' '-' '--format=2' '--excmd=pattern' '--fields=nksSaf' '--extra=' '--file-scope=yes' '--sort=no' '--append=no' '-V' '--language-force=python' '--python-kinds=icfmv' '/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/v0jhgoR/4.py') >/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/v0jhgoR/5 2>&1"
但来自 neovim,等效行是:
Executing command: "'/Users/owen/miniconda3/bin/xonsh' '-c' ''/usr/local/bin/ctags' '-f' '-' '--format=2' '--excmd=pattern' '--fields=nksSaf' '--extra=' '--file-scope=yes' '--sort=no' '--append=no' '-V' '--language-force=python' '--python-kinds=icfmv' '/var/folders/_z/tz5..."
区别似乎在于调用 ctags 的方式 - vim 直接调用它,而 neovim 调用 shell 可执行文件并传递 -c 参数。但是,如果我从命令行 运行 neovim 使用的命令,它工作正常。
我试过设置 tagbar_ctags_bin
,但没用。
关于我还需要挖掘哪里的任何线索?
我的猜测是 xonsh
对连接到终端做了一些假设,这在终端 Vim 中是正确的,但 gVim 和 Neovim(使用管道调用命令)都不是).
尝试将 shell*
选项设置为默认值:
:set shell& shellcmdflag& shellpipe& shellquote& shellredir& shellxquote& shellxescape&
(或者只需删除配置中设置这些选项的行。)
The difference appears to be how ctags is being called - vim calls it directly but neovim calls the shell executable and passes the -c argument
不,这只是日志输出的不同。 Vim 还使用 'shell' 选项和 'shellcmdflag' 选项(其日志消息提示:Calling shell to execute...).
我的 tagbar 插件在 vim 中运行良好,但在 neovim 中没有显示标签。
当我在两者中使用 TagbarDebug
时,我可以看到当 vim 中的 运行 时 ctags 输出正常,但在 neovim 中,tagbardebug.log.ctags_out
仅包含以下行:
^[[31;01m'^[[39;00m^[[31;01m/usr/local/bin/ctags-f---format=2--excmd=pattern--fields=nksSaf--extra=--file-scope=yes--sort=no--append=no-V--language-force=python--python-kinds=icfmv/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/nvimoU8Oxr/1.py^[[39;00m^[[31;01m'^[[39;00m
从tagbardebug.log
,我可以看出两者对ctags的调用略有不同。在 vim 中,日志有:
Calling shell to execute: "('/usr/local/bin/ctags' '-f' '-' '--format=2' '--excmd=pattern' '--fields=nksSaf' '--extra=' '--file-scope=yes' '--sort=no' '--append=no' '-V' '--language-force=python' '--python-kinds=icfmv' '/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/v0jhgoR/4.py') >/var/folders/_z/tz5sb8jd6mj41gj2gn8qvhhr0000gn/T/v0jhgoR/5 2>&1"
但来自 neovim,等效行是:
Executing command: "'/Users/owen/miniconda3/bin/xonsh' '-c' ''/usr/local/bin/ctags' '-f' '-' '--format=2' '--excmd=pattern' '--fields=nksSaf' '--extra=' '--file-scope=yes' '--sort=no' '--append=no' '-V' '--language-force=python' '--python-kinds=icfmv' '/var/folders/_z/tz5..."
区别似乎在于调用 ctags 的方式 - vim 直接调用它,而 neovim 调用 shell 可执行文件并传递 -c 参数。但是,如果我从命令行 运行 neovim 使用的命令,它工作正常。
我试过设置 tagbar_ctags_bin
,但没用。
关于我还需要挖掘哪里的任何线索?
我的猜测是 xonsh
对连接到终端做了一些假设,这在终端 Vim 中是正确的,但 gVim 和 Neovim(使用管道调用命令)都不是).
尝试将 shell*
选项设置为默认值:
:set shell& shellcmdflag& shellpipe& shellquote& shellredir& shellxquote& shellxescape&
(或者只需删除配置中设置这些选项的行。)
The difference appears to be how ctags is being called - vim calls it directly but neovim calls the shell executable and passes the -c argument
不,这只是日志输出的不同。 Vim 还使用 'shell' 选项和 'shellcmdflag' 选项(其日志消息提示:Calling shell to execute...).