Vim ruby,rails 全能补全:"Error loading rails environment"。我如何配置 vim-ruby 的自动完成以与 rails 一起使用?

Vim ruby, rails omnicompletion: "Error loading rails environment". How do I configure vim-ruby's autocomplete to work with rails?

我正在尝试让 vim-ruby 的自动完成与 vim-rails 一起工作。到目前为止,我可以使用 <C-x><C-n> 对当前文件中的现有方法和变量进行局部关键字补全(尽管不保留实例变量和符号的前缀)。我希望能够自动完成 Rails 方法,例如 redirect_tohas_many。但是,当我尝试使用 omni-completion 来完成此任务时,例如redir<C-x><C-o>, Vim 告诉我:

Error loading rails environment
Press ENTER or type command to continue

当我按下 ENTER 时,Vim 告诉我:

-- Omni completion (^O^N^P) Pattern not found

vim-ruby 的自动完成适用于普通 Ruby 文件,因此 Arr<C-x><C-o> 完成 Array,然后 Array.<C-x><C-o> 提供了一个列表Array 上的方法可供选择。当我在 Rails 文件中尝试此操作时,出现与上述相同的错误;但是,当我按 ENTER 消除错误时,ruby 的自动完成功能按预期工作。

我的问题是,如何正确配置 vim-ruby 才能加载 Rails 环境?我假设这是一个 vim-ruby 问题而不是 vim-rails 因为像 :Econtroller <controllername> 这样的命令按预期工作。

我的 .vimrc 包含以下内容:

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'flazz/vim-colorschemes'
Plugin 'slim-template/vim-slim'
Plugin 'vim-ruby/vim-ruby'
Plugin 'tpope/vim-rails'
Plugin 'tsaleh/vim-shoulda'
Plugin 'ervandew/supertab'
call vundle#end()

autocmd FileType ruby set omnifunc=rubycomplete#Complete
let g:rubycomplete_buffer_loading = 1
let g:rubycomplete_classes_in_global = 1
let g:rubycomplete_rails = 1

经进一步调查,vim-ruby 正在执行系统的 ruby,我无法使用它使 rubygem 工作。我不太确定,但我相信 vim-ruby/autoload/rubycomplete.vim 在尝试要求 console_app gem 时在 this line 处失败,而我的系统中不存在它。

于是我按照说明on Jon Cairns' blog重新构建了vim。该文章引用了 RVM,但同样适用于 rbenv 或您可能正在使用的任何 ruby。

为了后代,在 Ubuntu 上,我采取的步骤是:

sudo apt-get install mercurial

hg clone https://vim.googlecode.com/hg/ vim && cd vim

./configure --with-features=HUGE --enable-pythoninterp=yes --enable-multibyte=yes --enable-rubyinterp=yes --with-ruby-command=$(which ruby) --enable-gui=gnome2 --with-x --enable-fontset

make

sudo make install

完成此操作后,Rails 中的全方位补全就像一个魅力 - 尽管第一次使用时有点慢。