Vim Command-T插件错误:无法加载C扩展

61
我正在尝试安装Command-T插件。 我按照这条评论中的说明编译了vim:Installing vim with ruby support (+ruby)。 现在有了+ruby标志,但当我试图使用插件时,仍然会出现以下错误:
command-t.vim could not load the C extension
Please see INSTALLATION and TROUBLE-SHOOTING in the help              
For more information type:    :help command-t

我已经在我的系统上安装了Ruby:

> ruby -v
> ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
建议?

4
您可以查看ctrlp.vim,它基本上与Command-T相同,但是纯粹使用Vimscript编写。这意味着它既不需要在Vim中启用Ruby支持,也不需要编译一些用C实现的Ruby扩展。 - datentyp
Ctrl+P也不错,但是在处理大型项目方面,它不如Command+T表现得好。 - alex
10个回答

107
去插件目录并运行以下命令:
rake make

它编译您需要的插件扩展。


@CoreyRothwell,那就两天吧。天啊,有时候我需要在反复查看文档之前先谷歌一下。 - shriek
RVM 用户请确保您正在使用 Vim 在错误消息中指定的确切 Ruby 版本。 - Joe Sak

32

我遇到了相同的错误,但是在仔细阅读手册后,我发现以下内容很有帮助。

https://github.com/wincent/Command-T的INSTALLATION部分标记。

接下来必须构建C扩展,可以通过 shell 完成。 如果使用典型的|'runtimepath'|,则文件已安装在~/.vim内,您可以使用以下命令构建扩展:

cd ~/.vim/ruby/command-t/ext/command-t
ruby extconf.rb
make

4
上面的评论建议使用 rake make,但对我没有效果。我通过 Vundle 安装了 CommandT,但没有 Makefile。为了补充这个答案,我不得不转到 ~/.vim/bundle/Command-T/ruby/command-t 并运行这里建议的命令。对于我的系统来说,这还涉及安装 ruby-dev 包。感谢 peralmq! - jonthalpy
3
现在 extconf.rb 的正确目录为:“<YourRepoDir>/command-t/ruby/command-t/ext/command-t/”。如果它再次更改,您可以在 https://github.com/wincent/command-t/find/master 上搜索“extconf.rb”。 - phinz
使用与 Vim 相同的 Ruby 版本运行命令 "ruby extconf.rb"。这不应该使用 rvm 或其他 Ruby 版本管理器,而是应该使用您系统上已安装的 Ruby 版本。 - Deepak

4

必须使用与Vim本身链接的Ruby版本执行构建。

你使用RVM还是rbenv?个人而言,我使用的是rbenv和MacVim。我遇到了这个错误,因为我尝试使用ruby 1.8.7补丁352。在运行ruby extconf.rbmake之前,我使用rbenv shell system切换回1.8.7补丁249,然后一切都正常了。

之后,你可以使用rbenv shell --unset将你的shell还原。


2
在Debian Squeeze上,我还需要使用apt-get install libjson-ruby1.8安装Ruby的JSON库。

1

我遇到了类似的错误并尝试了rake make,正如其中一个答案建议的那样,它还运行了ruby extconf.rb,我得到了以下错误

─$ rake make
/usr/bin/ruby2.3 extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h
rake aborted!
Command failed with status (1): [/usr/bin/ruby2.3 extconf.rb...]
/home/shreedhan/.vim/bundle/command-t/Rakefile:84:in `block (2 levels) in <top (required)>'
/home/shreedhan/.vim/bundle/command-t/Rakefile:83:in `chdir'
/home/shreedhan/.vim/bundle/command-t/Rakefile:83:in `block in <top (required)>'
Tasks: TOP => make
(See full trace by running task with --trace)

你需要根据你的发行版选择安装ruby-devel或者ruby-dev,如果你使用的是yum,就安装ruby-devel,如果你使用的是apt,就安装ruby-dev
yum install ruby-devel

或者

$ apt install ruby-dev

1

如果您确定已按照GitHub项目上的说明进行操作,可能需要重新启动Vim和终端。我曾遇到过同样的问题,当我重新启动Vim时,它最终起作用了!


1

Command-T 需要编译的组件。错误信息表明您尚未完全按照插件的安装说明进行操作。


1

请查看安装说明:https://github.com/wincent/Command-T 在该页面上搜索“INSTALLATION”标题。您很可能没有遵循此官方README中的说明。如果您正在使用RVM,请确保使用系统ruby。所有这些都在文档中注明。


0

经过一些尝试和错误,我在处理Mac OS问题的command-t FAQ中找到了这个命令。我正在运行“High Sierra 10.13.4”:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future ruby extconf.rb

这似乎生成了一个成功编译的Makefile。虽然我尝试了很多东西,但这个解决方案感觉有点神秘。


0

我通过以下步骤解决了这个问题:

  1. ~/.vim文件夹中找到你的ruby文件夹,因为我的文件夹不在~/.vim/ruby中
  2. find . -name "extconf.rb"- 查找extconf.rb文件,在command-t文件夹中可能会找到
  3. ruby extconf.rb
  4. make
  5. 重新打开vim

阅读vim内部文档(:help command-t)也可能很有用。


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