2015-04-09 4 views
1

Я пытаюсь получить автозаполнение vim-ruby, работая с vim-rails. До сих пор я мог выполнять локальное ключевое слово с существующими методами и переменными в текущем файле, используя <C-x><C-n> (хотя префиксы для переменных и символов экземпляра не сохраняются). Я хотел бы иметь возможность автозаполнения методов Rails, таких как redirect_to и has_many. Однако, когда я пытаюсь использовать omni-completion для выполнения этой задачи, например, redir<C-x><C-o>, Vim говорит мне:Vim ruby, rails omnicompletion: «Ошибка загрузки рельсов». Как настроить автозаполнение vim-ruby для работы с рельсами?

Error loading rails environment 
Press ENTER or type command to continue 

Когда я нажимаю ENTER, Vim говорит мне:

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

vim-ruby «s автодополнение работает для простых файлов Руби, так что 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 

ответ

3

При дальнейшем исследовании, vim-ruby выполнял рубин системы, с которой я не был в состоянии получить RubyGems работать. Я не совсем уверен, но я считаю, что vim-ruby/autoload/rubycomplete.vim терпел неудачу в this line, пытаясь потребовать драгоценный камень console_app, которого не было в моей системе.

Поэтому я перестроил vim в соответствии с инструкциями on Jon Cairns' blog. В статье упоминается RVM, но в равной степени применима к rbenv или тому рубину, который вы могли бы использовать.

Ради потомства, на 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

После этого omni-completion в Rails работает как шарм - хотя и немного медленный в первый раз, когда он используется.

+1

Не нужно устанавливать меркурий больше, так как vim находится на github. команда для запуска до './configure ...' является 'git clone https://github.com/vim/vim.git && cd vim' – PaddyDwyer