2012-01-22 4 views
4

Python.For関数で自分のクラスのタグ(ctags 5.8)ファイルを作成したいと思います。クラス定義の外で定義されたクラスメンバーomnicompletionは正常に動作します。しかし、コンストラクタ(self.x = 2)にデータメンバを定義すると、ctagsの完了を見ることができません。vimのpythonクラスメンバーのためのomnicompletionはありませんか?

class A(object): 

    def __init__(self): 
     self.x = "whatever" # x will not seen in ctags/omnicompletion!!! 

私はsthを間違っていますか?なぜomnicompletionがない(ctagsファイルは大丈夫ですか?)私はあなたの問題の権利を理解している場合

+0

あなたはRopeを試すことができます - それをインストールする方法の小さな説明については、http://stackoverflow.com/questions/6724619/python-autocompletion-on-object-instances-in-vimを参照してください。 – BergmannF

+0

Thx!これは私が探していたものです:) – borko84

答えて

1

、あなたは常に、クラス定義内の属性を追加することができます。

class A(object): 

    x = None 

    def __init__(self): 
     self.x = whatever 

あなたのコードを読んで、この方法で誰もがどの属性を、見ている(あなたがそれらを呼んでいる「クラスメンバー」)クラス持っている。 、見ることができるようにx属性は、独自のレコードを持って

!_TAG_FILE_FORMAT  2  /extended format; --format=1 will not append ;" to lines/ 
!_TAG_FILE_SORTED  1  /0=unsorted, 1=sorted, 2=foldcase/ 
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/ 
!_TAG_PROGRAM_NAME  Exuberant Ctags // 
!_TAG_PROGRAM_URL  http://ctags.sourceforge.net /official site/ 
!_TAG_PROGRAM_VERSION 5.9~svn20110310 // 
A  aaa.py /^class A(object):$/;" c 
__init__  aaa.py /^ def __init__(self, x):$/;" m  class:A 
x  aaa.py /^ x = None$/;"  v  class:A 

UPDATE:

$ ctags --version 
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert 
    Compiled: Mar 18 2011, 10:38:14 

たタグファイルでチェックは、次のようになります。また、emacsの互換タグを作成することにより、Emacsので確認

は、最初のファイル:

ctags -e aaa.py # where aaa.py - file with code snippet above 

(これはTAGSファイルを作成した)

内部のEmacs:

M-. x (enter) 
~/TAGS (enter) 

...と出来上がり!カーソルはx = None行にあります。

また、元のスニペットは機能しません。だから、クラスの名前空間の属性を初期化するための私のアドバイスが有効です。

+0

ctagsを使用したコード補完はまだありません。クラス外で定義されたデータメンバ(例:A.y = 5)のみがctagsファイルで可視であるため、omnicompletionで使用できます(メンバ関数はすべて正常です) – borko84

+0

Ok。おそらくあなたが使用しているctagsは、その作業にはあまり適していません。 –

+0

kubuntuとwindowsで最新のctags 5.8をチェックしましたが、動作していません。 – borko84

関連する問題