【发布时间】: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