4

我有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,但这没什么区别。

关于我还需要在哪里挖掘的任何线索?

4

1 回答 1

2

我的猜测是xonsh,它对连接到终端做出了一些假设,这在终端 Vim 中是正确的,但在 gVim 和 Neovim(使用管道调用命令)中则不然。

尝试将shell*选项设置为其默认值:

:set shell& shellcmdflag& shellpipe& shellquote& shellredir& shellxquote& shellxescape&

(或者只是删除配置中设置这些选项的行。)

不同之处似乎在于如何调用 ctags - vim 直接调用它,但 neovim 调用 shell 可执行文件并传递 -c 参数

不,这只是日志输出的不同。Vim 还使用 'shell' 选项和 'shellcmdflag' 选项(其日志消息提示:调用 shell 来执行...)。

于 2019-04-29T09:45:37.483 回答