11

セットアップ

私の.vimrc中には次の行があります:

" .vimrc
let g:virtualenv_directory="/Users/Kit/Development/virtualenv"

それから~/.vim/ftplugin/python/virtualenv.vim私はこれらを持っています:

py << EOF
import os.path
import sys
import vim
if 'VIRTUAL_ENV' in os.environ:
    project_base_dir = os.environ['VIRTUAL_ENV']
    sys.path.insert(0, project_base_dir)
    activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
    execfile(activate_this, dict(__file__=activate_this))
    print "virtualenv in os.environ!"
EOF
VirtualEnvActivate my-virtualenv-python-2.7

私は~/.vim/ftplugin/python/virtualenv.vimこれらのSuperTab設定を持っています:

setlocal omnifunc=pythoncomplete#Complete
setlocal completeopt=menuone,longest,preview
let g:SuperTabDefaultCompletionType="<c-x><c-]>"

いつも作業している作業ディレクトリで、次のbashコマンドを実行して、TAGSすべてのファイルのファイル.pyを生成しました。

find . -name '*.py' -type f -print0 | xargs -0 etags -l python

問題

たとえば、次のスクリプトが正常に機能するようにmain.py、オブジェクトappが内部にあるaがあります。

import main
new_app = main.app() # works totally fine Python-wise

たとえば、新しいコードを記述して、SuperTabオムニコンプリーションを使用しようとすると、次のようになります。

import main
new_new_app = main.<Tab>

これは私が得るものです:

new_new_app = mainself.

そして、私がTab数回押すと:

new_new_app = mainselfselfselfself.

私のために働くもの

ただし、次のことを行う場合:

new_new_app = main.a<Tab>

a..モジュールに属していないオブジェクトを含むオブジェクトの全リストを取得しますmain

欲しいもの

次のように設定した場合.vimrc

let g:SuperTabDefaultCompletionType="context"

次に、標準のPythonライブラリのモジュールを使用します。

import sys
sys.<Tab> # This will still result in sysselfselfself.
sys.p<Tab> # This will result in the correct list of `sys` members beginning with `p`

ただし、この"context"設定は自分のモジュールでは機能しません。

new_new_app = main.a<Tab>
# Will say at the bottom: Omni completion (^O^N^P) Pattern not found

質問

omn​​icompletionとSuperTabを設定して、標準ライブラリモジュールと同様に自分のモジュールでも動作するようにするにはどうすればよいですか?selfselfself.煩わしさを解消するだけでなく?

4

1 に答える 1

5

ご指摘のとおり、これはsnipmateが原因です:https ://github.com/garbas/vim-snipmate/issues/65

私も解決策を提案しました: https ://github.com/garbas/vim-snipmate/pull/84

snipmateはコンテキストに依存してはならないため、受け入れられませんでした。

これには2つの解決策があります。

  1. 私のスニップメイトフォークを取ります:

    https://github.com/davidhalter/vim-snipmate

    これは私のフォークであり、積極的に保守していないため、おそらく最善のアイデアではありません。

  2. https://github.com/honza/snipmate-snippetsをフォークし、ドットのマッピングを削除します(ドットを使用して、自分自身を完成させることはできなくなります)。

于 2012-04-07T23:10:10.623 に答える