Tagbar插件在Vim中正常工作,但在Neovim中不起作用。

4
我已经在vim中完美地运行了插件tagbar,但是在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使用的命令,它就能正常工作。

我尝试设置,但没有任何效果。

有什么线索可以让我继续挖掘吗?


1
我怀疑 vim 也在调用 shell,只是 neovim 更加明确。vim 说:“calling shell to execute [blah blah blah]”。neovim 说:“执行命令 [your weird shell] -c [blah blah blah]”。vim 是否可能通过不同的 shell 进行调用?我们如何判断? - David Jones
我曾经想过xonsh可能是问题所在,但我没有想到vim可能会“自作主张”。我可以尝试将默认shell更改为bash,看看会发生什么。 - meatballs
1个回答

2

我猜测xonsh做出了一些关于连接到终端的假设,在终端Vim中这是正确的,但不适用于gVim或Neovim(后者使用管道调用命令)。

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

最初的回答
:set shell& shellcmdflag& shellpipe& shellquote& shellredir& shellxquote& shellxescape&

(或者简单地在您的配置中删除设置这些选项的行。)

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

不是的,那只是日志输出的差异。Vim也使用了'shell'选项和'shellcmdflag'选项(这可以从其日志消息中推断出来:Calling shell to execute...)。


太棒了!问题解决了!在init.vim中添加一行设置shell为bash的代码就解决了。非常感谢您。 - meatballs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接