web-dev-qa-db-ja.com

PythonでのVimの全方向性補完が機能しない

Stack Overflowと他の場所の両方で1時間ほど検索しました。ああ!助けてください。 Vimの全完成は機能しません

  1. Pythonサポート付きでコンパイルされたVim 7.2を持っています。

  2. filetype plugin onは私の.vimrcにあります。

  3. .pyファイルを開くと、:echo &omnifuncpythoncomplete#Completeを出力します。

  4. 大規模なプロジェクトで作業しており、exhuberant-ctagsで生成されたtagsファイルを持っています。 Vimのctagsパスにあります。入力してテストできます ^] シンボル上で、私はそれからシンボルの定義に連れて行かれます。

  5. 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=を今のところ書くのをやめました、そしてこれらの提案がどれだけうまく機能するかをテストすることはできません。

52
a paid nerd

完成しようとしているシンボルが含まれているモジュールはどれですか? python stdlibにありますか?それともサードパーティのモジュールですか?

モジュール/パッケージがPYTHONPATHにあることを確認してください。

Vimでは、次のようにします。

:python import sys
:python print sys.path

モジュールのディレクトリを追加するには:

:python sys.path.append("/path/to/directory/")
12
codeape

あなたは慎重で、コードがPYTHONPATHによって到達可能であることを確認したので、codeapeの提案に従って、Vimの importバグに遭遇している可能性がありますPython omni-complete ?このバグはVim 7.2.245でも存在します。

基本的に、作業中のファイルでany importステートメントが失敗した場合、それがTry-Except句でラップされているかどうかに関係なく、オムニ補完は完全に中断されます。ほとんどのインポートはファイルの先頭で行われるため、これを確認するのはかなり簡単です。

このバグがトラブルの原因であると判断した場合、次のオプションがあります。

  • インポートするモジュールがプロジェクトファイルだけでなく、システムパス上にあることを確認する
  • 失敗したimportステートメントをコメント化する
  • バグを修正する
  • ropevim を補完メソッドとして使用する
  • 別のエディターを使用する。 Netbeans IDEはPythonをサポートしており、 jViプラグイン は、私のようなVim中毒者には適していません(しないでください) 1990年代のホームページをだましてみましょう)
9
gotgenes

質問者がダークサイド*に久しぶりに聞こえたように聞こえますが、それだけの価値があるのは、この症状があったことです。私の場合、使用しているモジュールがPython 2.7に依存していたことが原因でしたが、 VimのバージョンはPython 2.5でコンパイルされました。

診断するために、依存モジュールのインポートに関するエラーで失敗した:python import mymoduleを試しました。その後、:python import dependentmoduleは、チェーンの次のステップで失敗しました。以下同様に、Python 2.7以降の新しいシステムモジュールのインポートに失敗するまで。問題が見つかりました。

解決するために、私はSudo port install vim +python27を実行しました。しかし、それはOSXの場合です。 YMMV。

(*私は冗談です。Emacsユーザーは私たちの友達です。メモ帳でプログラミングしているすべての人が保存する必要があります...)

9
Kris Jenkins

Fedora 16に更新しました(ただし、ソースからvimをコンパイルしています)と、オムニ補完は上記と同じメッセージで機能しなくなりました。キーを再マッピングすることで「修正」しました。

inoremap <C-space> <C-x><C-o>

~/.vimrcそして今それは再び動作します。

2
Sardathrion

オムニ補完が機能しないという同様の問題がありました。私の場合、minibufexpl.vimプラグインがオムニ補完を妨害していることがわかりました。ここに私が見つけた方法があります:

通常のキーワード補完が機能します。 Omni completeは、Pythonだけでなく、どの言語でも機能しません。 omn​​ifuncが正しく設定されている。 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>
2
fspeech

Python2を使用している場合は、

Sudo apt-get install vim.nox-py2 

そして、vimの代わりにvim.nox-py2を使用してください。

0
csghone

<C_x><C-]>を使用してみましたか?

0
m42a

c-x c-nは、オブジェクトのメンバーのリストを取得するように機能します。

0
bytemangler

私はスーパータブを使用しました(http://www.vim.org/scripts/script.php?script_id=1643)

C-x C-oを使用するのは少し面倒なので

.vimrc内:

let g:SuperTabDefaultCompletionType = "<c-x><c-o>"

次に、完全な補完のためにTabbを使用します

0
klippo