YouCompleteMe 错误:找不到可执行文件 'npm'。安装 TSServer 需要 npm



在为 vim 安装 YouCompleteMe 时,我想安装对 Java 和 Javascript 的支持。因此,按照此处的说明,我运行:

sudo /usr/bin/python3.6 ./install.py  --java-completer --ts-completer

但是,它出错并显示以下消息:

...
[100%] Linking C shared library /home/vagrant/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/cregex/regex_3/_regex.so
[100%] Built target _regex
Downloading jdt.ls from http://download.eclipse.org/jdtls/snapshots/jdt-language-server-0.54.0-202004152304.tar.gz...
Extracting jdt.ls to /home/vagrant/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/eclipse.jdt.ls/target/repository...
Done installing jdt.ls
ERROR: Unable to find executable 'npm'. npm is required to install TSServer.

这是可以理解的,除了我已经在我的PATH上设置了 npm,如下所示:

=> npm -v
6.13.4
=> which npm
/home/vagrant/.nvm/versions/node/v8.17.0/bin/npm

任何猜测为什么YouCompleteMe与ts-completer支持无法安装?

关于为什么支持ts-completer的YouCompleteMe无法安装的任何猜测?

安装失败,因为您以sudo身份运行 install.py,并且nvm安装节点的位置不在secure_path中。当脚本以sudo身份运行时,正在使用secure_path

您可以看到PATHsecure_path的不同内容,如下所示:

$ echo 'echo $PATH' | sudo sh    # secure_path
$ echo 'echo $PATH' | sh         # your user PATH

您还可以确认sudo在其路径上缺少npm,如下所示:

$ which npm
$ sudo which npm

怎么办?

一种选择是在没有 sudo 的情况下运行脚本,如下所示:

/usr/bin/python3.6 ./install.py  --java-completer --ts-completer

另一种方法是将 nvm bin 内容复制到secure_path位置之一。/usr/local/bin就是其中之一。

$ find $(which npm | xargs dirname) -type l -o -type f | sudo xargs cp -t /usr/local/bin
# test
$ sudo npm -v
$ sudo node -v

完成后,安装程序将找到npm.

最新更新