2

我正在尝试起床并使用带有 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 完成类型的作用(关键字本地完成、全方位完成、用户定义完成)有点困惑从 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

当我再次尝试时,它给了我 -- Omni completion (^O^N^P) Pattern not found

然而,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/ruby 下安装了 1.8.7我使用 rvm 并安装了带有 rails 3.0.7 的 1.9.2。这可能是问题所在?我还没有找到一种方法来告诉 macports 使用已经安装的 ruby​​ 版本。

感谢你的帮助!

4

1 回答 1

1

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

:setlocal completefunc=javacomplete#CompleteParamsInfo

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

has_<C-X><C-U>

自动完成 has_many。(你甚至不应该需要这些autocmd FileType ruby,eruby ...线条。)

是的,它很聪明,因为它n<C-X><C-U>会给你named_scope一个模型,但给你number_to_currency一个视图。

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

于 2011-07-15T17:48:43.230 回答