Нет vomnicompletion для членов класса Python в VIM? - PullRequest
4 голосов
/ 22 января 2012

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

class A(object):

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

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

1 Ответ

1 голос
/ 22 января 2012

Если я правильно понял вашу проблему, вы всегда можете добавить атрибуты в определение класса:

class A(object):

    x = None

    def __init__(self):
        self.x = whatever

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

ОБНОВЛЕНИЕ: проверено с помощью

$ 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  /dhiebert@users.sourceforge.net/
!_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 линии.

Кроме того, ваш оригинальный фрагмент не работает.Поэтому мой совет по инициализации атрибута в пространстве имен класса действителен.

...