2

ruby on rails で vim を起動して作業しようとしていますが、omni-completion でいくつかの問題が発生しています。

インストールされているように見えるvim用のrails.vimプラグインをvim呼び出しでダウンロードしました

:Rails! 

与える

rails.vim 4.3 (Rails-model-arb)

:Rcontroller のような rails.vim 固有の関数の呼び出しは夢のように機能するため、すべて非常に有望に見えます。私の問題は、次の内容で、たとえば Blog/app/models/post.rb などのルビファイルを作成するときのオムニ補完と構文の強調表示にあります。

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

スーパータブがレールのオムニ補完を使用して、「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

もう一度試してみると、それが得られます -- オムニ補完 (^O^N^P) パターンが見つかりません

ただし、omnicompletion は多くの場合に機能します。たとえば、meth と入力すると、method、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 ディレクトリにあり、スーパータブは正常に動作し、~/.vim/bundle/supertab にインストールされます

私はこの小さなことを理解しようと長い時間を費やしてきましたが、成功していません! これからどこに行くべきかについて誰か考えがありますか?.vimrc ファイルのスーパータブ定義、または ruby​​ オムニコンプリート定義と関係があると思います。

行を削除すると

autocmd FileType ruby,eruby let g:rubycomplete_rails = 1

.vimrc ファイルからエラー ロード レール エラーは消えますが、もちろんテキストの完了はなく、ユーザー定義の完了エラーのみです。

これは、StackOverflow に関する私の最初の投稿です。たくさん閲覧した後です。関連するすべての詳細を提供できたことを願っています。

MacPorts で vim をインストールしました。現在のバージョンは vim @7.3.146_0+huge+perl+python27+ruby です。ruby は有効になっていますが、macports は独自のバージョンをインストールしたかったため、1.8.7 が /opt/local/ruby の下にインストールされています。私はrvmを使用し、レール3.0.7とともに1.9.2をインストールしました。これはおそらく問題でしょうか?ただし、既にインストールされているバージョンの ruby​​ を使用するように macports に指示する方法は見つかりませんでした。

ご助力いただきありがとうございます!

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_scopenumber_to_currency

ただし、rails.vim はカスタム メソッドをオートコンプリートしませんが、それを追加するプラグインが世の中にあると確信しています。

于 2011-07-15T17:48:43.230 に答える