我正在尝试起床并使用带有 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 版本。
感谢你的帮助!