【问题标题】:rails.vim with ruby omnicompletion giving "Error loading rails environment" errorrails.vim with ruby​​ omnicompletion 给出“Error loading rails environment”错误
【发布时间】:2011-07-16 01:48:43
【问题描述】:

我正在尝试使用 ruby​​ on rails 和 vim 一起工作,但在使用全补全时遇到了一些问题。

我已经下载了 vim 的 rails.vim 插件,它似乎已安装,带有 vim 调用

:Rails! 

给予

rails.vim 4.3 (Rails-model-arb)

调用 rails.vim 特定的函数,如 :Rcontroller 是一个梦想,所以看起来很有希望。我的问题是全方位完成和语法突出显示,当我使用以下内容对例如 Blog/app/models/post.rb 文件进行 ruby​​ 时

1 class Post < ActiveRecord::Base
2   validates :name,  :presence => true
3   validates :title, :presence => true,
4                     :length   => { :minimum => 5 }
5   has_[<C-X><C-O> or <C-X><C-U> or <C-X><C-P>]
6 end

我希望 supertab 使用 rails omni-completion 为我提供诸如“has_many”等选项。我对每种 vims 完成类型的作用(关键字本地完成、omnicompletion、user定义完成)从rails文档中它建议用户定义的完成应该提供这个功能。尝试时出现以下错误:

-- User defined completion (^U^N^P) Pattern not found
Press ENTER or type command to continue

当我第一次尝试时:

Error loading rails environment
Problem loading class "Post", was it already completed?
Press ENTER or type command to continue

当我再次尝试时,它给了我 -- 全方位补全 (^O^N^P) 未找到模式

然而,omnicompletion 在许多情况下确实有效,例如,如果我输入 meth,它会给我一个包含方法、method_defined?、method_missing、可供选择的方法的列表。

我正在使用病原体来处理我的 vim 文件,但我的 .vimrc 文件包含以下相关行。

set nocompatible
call pathogen#helptags()
call pathogen#runtime_append_all_bundles()
syntax on

filetype plugin on
filetype indent on

"set ofu=syntaxcomplete#Complete
set completeopt+=longest,menu,preview

" For code completion with a drop down menu
"au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-x><c-o>"
let g:SuperTabContextTextOmniPrecedence = ['&omnifunc', '&completefunc']
let g:SuperTabCompletionContexts = ['s:ContextText', 's:ContextDiscover']
let g:SuperTabContextDiscoverDiscovery = ["&completefunc:<c-x><c-u>", "&omnifunc:<c-x><c-o>"]

" If you prefer the Omni-Completion tip window to close when a selection is
" " made, these lines close it on movement in insert mode or when leaving
" " insert mode
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

" Set up java autocompletion
:setlocal completefunc=javacomplete#CompleteParamsInfo
au FileType java set omnifunc=javacomplete#CompleteParamsInfo

" Adding ruby completion??
" Turn on language specific omnifuncs
autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1
autocmd FileType ruby,eruby let g:rubycomplete_rails = 1

rails.vim 在 ~/.vim/bundle/rails 目录下,supertab 工作正常,安装在 ~/.vim/bundle/supertab 下

我花了这么长时间试图弄清楚这件小事,但没有成功!有人对我应该从哪里开始有任何想法吗?我相信这可能与 .vimrc 文件中的 supertab 定义或 ruby​​ 全完成定义有关。

如果我删除该行

autocmd FileType ruby,eruby let g:rubycomplete_rails = 1

从 .vimrc 文件中,错误加载 rails 错误消失了,但当然没有完成文本,只有用户定义的完成错误。

这是我经过大量查看后在 StackOverflow 上的第一篇文章,希望我提供了所有相关的详细信息!

我用 MacPorts 安装了 vim,我当前的版本是 vim @7.3.146_0+huge+perl+python27+ruby,启用了 ruby​​ 但 macports 想安装自己的版本,因此在 /opt/local 下安装了 1.8.7 /ruby 尽管我使用 rvm 并安装了 1.9.2 和 rails 3.0.7。这可能是问题所在?我还没有找到一种方法来告诉 macports 使用已经安装的 ruby​​ 版本。

感谢您的帮助!

【问题讨论】:

  • 我开始怀疑这种能力是否值得期待?有人可以澄清 rails.vim 是否允许特定于上下文的完成,即认识到 has_many 可能属于该特定位置吗?我还尝试向模型添加一个方法并尝试在 @post 实例化后将其与 @post. 一起使用,但它似乎不允许这样做,这肯定是 rails.vim 的一项功能提供?
  • 可能与我的路径有关吗?我认为不需要添加任何内容,因为 rails.vim 显然已被识别(因此 Rcontroller Post 工作正常)

标签: ruby-on-rails ruby vim omnicomplete rails.vim


【解决方案1】:

我认为 ruby​​ 完成被 java 行覆盖:

:setlocal completefunc=javacomplete#CompleteParamsInfo

如果我评论这条线,我可以进入模型并做

has_<C-X><C-U>

自动完成 has_many。 (您甚至不需要 autocmd FileType ruby,eruby ... 行。)

是的,它很聪明,n&lt;C-X&gt;&lt;C-U&gt; 会在模型中为您提供 named_scope,而在视图中为您提供 number_to_currency 和朋友。

但是 rails.vim 不会自动完成自定义方法,尽管我确信有插件可以添加它。

【讨论】:

  • 好地方,当然不是 rails.vim 的问题,而是 .vimrc 的问题!干杯。
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
相关资源
最近更新 更多