2012-01-22 2 views
4

Я хочу создать теги (ctags 5.8) для моих классов в python.For функции и члены класса, определенные вне определения класса omnicompletion, работают нормально. Однако, если я определяю элемент данных в конструкторе (self.x = 2), я не вижу завершения ctags?Нет omnicompletion для членов класса python в vim?

class A(object): 

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

Я делаю это неправильно? Почему нет omnicompletion (файл ctags выглядит нормально)?

+0

Вы можете попробовать Веревку - см. 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 

Таким образом, все, кто читает ваш код видит, какие атрибуты (вы называя их «члены класса») класс есть.

UPDATE: проверено с

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

Результирующий теги файла выглядит следующим образом:

!_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 

Как можно видеть, x атрибут имеет свой собственный рекорд.

Также проверяется с 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

Я проверил последние буйные ctags 5.8 на kubuntu и windows, и они не работают. – borko84