Stack Overflowと他の場所の両方で1時間ほど検索しました。ああ!助けてください。 Vimの全完成は機能しません。
Pythonサポート付きでコンパイルされたVim 7.2を持っています。
filetype plugin on
は私の.vimrc
にあります。
.py
ファイルを開くと、:echo &omnifunc
はpythoncomplete#Complete
を出力します。
大規模なプロジェクトで作業しており、exhuberant-ctags
で生成されたtags
ファイルを持っています。 Vimのctags
パスにあります。入力してテストできます ^] シンボル上で、私はそれからシンボルの定義に連れて行かれます。
pdate 1:プロジェクトのコードはすべてpython-in-Vimのパスにあります。正常に:python import myproject
できます。
今、どこでも C-x C-o、私が得るすべては:
-- Omni completion (^O^N^P) Pattern not found
何が悪いのですか?
更新2:入力したとき C-x C-o C-n モジュールレベルで、Vimはプロジェクト内の他のモジュールからのいくつかのモジュールレベルの定数を含む完了ポップアップを表示します。しかし、それは定数(記号の大文字)のみであり、補完は他の場所では機能しません。
更新3:見つけた C-x C-o ファイルの先頭で、ある種のオムニコンプリーションが始まり、pprint.
を完了すると、pprint
モジュール内のすべてのメニューとクイックリファレンスが表示されます。ただし、自分のモジュールのインポートは完了していません。
更新1、1年後:私はあきらめてEmacsを学びました。私はダークサイド、陰謀とスパイスの神秘的な土地に行ったことがあります、そして私はあなたにザ・ウェイを見つけたと言います。
2年後の更新5: Vimに戻りました。 Emacsは美しいですが、1.5年のEmacsを経た後でも、Vimでの作業はまだ早いです。私はPython=を今のところ書くのをやめました、そしてこれらの提案がどれだけうまく機能するかをテストすることはできません。
完成しようとしているシンボルが含まれているモジュールはどれですか? python stdlibにありますか?それともサードパーティのモジュールですか?
モジュール/パッケージがPYTHONPATHにあることを確認してください。
Vimでは、次のようにします。
:python import sys
:python print sys.path
モジュールのディレクトリを追加するには:
:python sys.path.append("/path/to/directory/")
あなたは慎重で、コードがPYTHONPATHによって到達可能であることを確認したので、codeapeの提案に従って、Vimの import
バグに遭遇している可能性がありますPython omni-complete ?このバグはVim 7.2.245でも存在します。
基本的に、作業中のファイルでany importステートメントが失敗した場合、それがTry-Except
句でラップされているかどうかに関係なく、オムニ補完は完全に中断されます。ほとんどのインポートはファイルの先頭で行われるため、これを確認するのはかなり簡単です。
このバグがトラブルの原因であると判断した場合、次のオプションがあります。
質問者がダークサイド*に久しぶりに聞こえたように聞こえますが、それだけの価値があるのは、この症状があったことです。私の場合、使用しているモジュールがPython 2.7に依存していたことが原因でしたが、 VimのバージョンはPython 2.5でコンパイルされました。
診断するために、依存モジュールのインポートに関するエラーで失敗した:python import mymodule
を試しました。その後、:python import dependentmodule
は、チェーンの次のステップで失敗しました。以下同様に、Python 2.7以降の新しいシステムモジュールのインポートに失敗するまで。問題が見つかりました。
解決するために、私はSudo port install vim +python27
を実行しました。しかし、それはOSXの場合です。 YMMV。
(*私は冗談です。Emacsユーザーは私たちの友達です。メモ帳でプログラミングしているすべての人が保存する必要があります...)
Fedora 16に更新しました(ただし、ソースからvimをコンパイルしています)と、オムニ補完は上記と同じメッセージで機能しなくなりました。キーを再マッピングすることで「修正」しました。
inoremap <C-space> <C-x><C-o>
~/.vimrc
そして今それは再び動作します。
オムニ補完が機能しないという同様の問題がありました。私の場合、minibufexpl.vimプラグインがオムニ補完を妨害していることがわかりました。ここに私が見つけた方法があります:
通常のキーワード補完が機能します。 Omni completeは、Pythonだけでなく、どの言語でも機能しません。 omnifuncが正しく設定されている。 C-X C-Oを実行しても、何も起こりません。 「:py print globals()」を実行すると、pythoncompleteがロードされなかったことは明らかです。 「:call pythoncomplete#Complete(1、 '')」を実行して、読み込まれるのを確認できます。私にとって、これはVimの問題であることを除外します。キーマッピングを妨害している、またはオムニ完了リクエストを妨害しているようです。そこで、プラグインを1つずつ無効にしていきます。私の場合の犯人は「minibufexpl」であることがわかりました。 githubのHolgadoバージョンがあります。
Githubの課題追跡によると、MBEには多くの未解決の問題があり、2012年の初めから何の進展もありません。自動補完を使用できるように、今のところそれを無効にするつもりです。その間、私はvimrcに以下を追加して、複数の変更されたバッファーを同時に開いたままにし、単純なキーシーケンスを使用してそれらを循環します(MBEは循環するバッファーをよりインテリジェントに選択しますが、単純な問題には強すぎます):
set hidden
noremap <C-TAB> :bnext<CR>
noremap <C-S-TAB> :bprev<CR>
Python2を使用している場合は、
Sudo apt-get install vim.nox-py2
そして、vimの代わりにvim.nox-py2を使用してください。
<C_x><C-]>
を使用してみましたか?
c-x c-n
は、オブジェクトのメンバーのリストを取得するように機能します。
私はスーパータブを使用しました(http://www.vim.org/scripts/script.php?script_id=1643)
C-x C-oを使用するのは少し面倒なので
.vimrc内:
let g:SuperTabDefaultCompletionType = "<c-x><c-o>"
次に、完全な補完のためにTabbを使用します