Ruby command-t SEGV

5

我正在使用Ubuntu 11.10,并已安装并使用vim-gnome。使用vundle并安装了几个包,全部都在工作中。

我已经安装了command-t,但在编译C扩展之前它无法正常运行。根据手册,这是解决方案。

  rake make

对我来说,位置实际上是:

~/.vim/bundle/command-t

无论如何,我关闭了rvm并按照command-t帮助指南中的建议安装了系统1.8版本。 我查看了文档,发现编译错误的最常见原因是使用错误的ruby版本。

因此,我找到了这个命令来检查已编译的版本。

renshaw@renshaw-TravelMate-5740G:~/.vim/bundle/command-t$ ldd `which vim` | grep ruby
libruby1.8.so.1.8 => /usr/lib/libruby1.8.so.1.8 (0x00007f913932c000)

所以我安装了ruby 1.8的rake,并使用rake make进行了编译。

renshaw@renshaw-TravelMate-5740G:~/.vim/bundle/command-t$ sudo rake make
/usr/bin/ruby1.8 extconf.rb
checking for ruby.h... yes

然后它就开始编译了。

不过,启动gvim并运行\t命令即可使用Command-T。

Vim: Caught deadly signal SEGV
Vim: Finished.
Segmentation fault

我该如何在Ubuntu 11.10上安装command-t插件?
更新。
使用以下命令构建Gvim。
hg clone https://vim.googlecode.com/hg/ vim
cd vim
sudo ./configure --enable-rubyinterp=yes --enable-pythoninterp=yes --enable-gui=gtk2
make 
make install

vim --version | grep ruby

运行vim version命令返回正确的信息,说明ruby支持已经构建在我安装的系统1.8上,但是当使用T命令时仍然出现了SEGV错误。

因此,我找到并尝试了以下方法:

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

这也失败了。然后我从之前一张支持票中将这个添加到bashrc中。
vim() {
    (unset GEM_PATH GEM_HOME; command vim "$@")
}

我在Ubuntu 11.04上遇到了同样的问题,已经尝试了你大部分的方法。但是在我的另一台电脑上(也是Ubuntu 11.04),使用相同的设置,它可以正常工作。我使用的是vim-gnome软件包。 - mikabytes
4个回答

13

当我使用rake任务时,我也遇到了类似的问题。我通过自己编译扩展程序来解决了这个问题。

从command-t插件目录开始:

rvm use system    
cd ruby/command-t
ruby extconf.rb
make
sudo make install

3
编译成功了,但我仍然遇到相同的分段错误。 - sayth
对于Vundle用户:通过在.vimrc.bundles中添加Bundle 'Command-T'来安装Vundle的命令-T,然后按照Sean的答案进行操作。目录位于~/.vim/bundle/Command-T/ruby/command-t。非常好用。 - Mick

2
Ubuntu 13.04也有同样的问题。经过尝试不同的组合,我找到了解决方法。

我不喜欢从源代码构建,所以我使用了vim-nox包:

sudo apt-get install vim-nox

现在,当使用Ruby 1.8.7或Ruby 2.0.0编译command-t时,会捕获到SEGV信号。为了尝试不同的Ruby版本,我安装了rvm

curl -L https://get.rvm.io | bash

然后我使用Ruby 1.9.1来编译command-t扩展:

rvm install 1.9.1
rvm use 1.9.1
cd ~/.vim/bundle/command-t/ruby/command-t
ruby extconf.rb
make

总而言之:vim-nox + ruby 1.9.1 = 在Ubuntu 13.04上可以正常使用vim command-t命令。

谢谢,使用Ruby 1.9.1也解决了我的SEGV问题。对我来说,这是在Ubuntu 14.04上使用从源代码编译的Vim 7.4时出现的问题。 - jacderida

1

我按照这些说明在Ubuntu 11.10上构建了Vim和Command-T,并使用Ruby 1.9.2p290使其正常工作。

sudo apt-get install python-dev ruby-dev mercurial ncurses-dev liblua5.1-0-dev lua5.1

rvm use 1.9.2

hg clone https://vim.googlecode.com/hg/ ~/vim 
cd ~/vim
hg update -C v7-3-154
./configure --with-features=huge  --disable-largefile \
        --enable-perlinterp   --enable-pythoninterp \
        --enable-rubyinterp   --enable-gui=gtk2 \      
make
sudo make install

然后按照 Pathogen 的 Command-T 安装说明 进行操作,以我的情况为例。


0

这是我如何解决这个问题的(我认为它是由版本不匹配引起的):

我安装了一个旧版本的vim(使用debian的apt)。旧版本的vim使用旧的1.9.x版本的Ruby库。我按照https://github.com/wincent/Command-T中的指南编译了command-t。在编译过程中,我使用了ruby 2.1.x。当我执行t时,我遇到了SEGV错误。我认为这是由于我编译command-t时使用的Ruby版本与vim使用的Ruby版本不匹配所致。因此,解决方法是将vim编译成与command-t编译时使用的相同的Ruby库。当我使用“apt-get install vim”升级我的vim后,一切都开始正常工作了。现在新版本的vim正在使用与软件包管理器一起提供的相同的新的Ruby库。


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