Использование cscope для просмотра кода Python с VIM? - PullRequest
17 голосов
/ 15 сентября 2010

Кому-нибудь удалось успешно использовать cscope с кодом Python?У меня установлен VIM 7.2 и установлена ​​последняя версия cscope, однако он не правильно отображает теги моего кода (всегда на несколько строк).Я пробовал скрипт pycscope, но его вывод не поддерживается современной версией cscope.

Есть идеи?Или альтернатива для просмотра кода Python с VIM?(Меня особенно интересуют дополнительные возможности cscope, предлагаемые помимо простых тегов ctags)

Ответы [ 5 ]

18 голосов
/ 20 сентября 2010

РЕДАКТИРОВАТЬ: я собираюсь запустить процесс шаг за шагом:

Подготовка источников:

exhuberant ctags, имеет опцию: -x

   Alternatively,  ctags  can generate a cross reference file which lists,
   in human readable form, information about the  various  source  objects
   found in a set of language files.

Это ключ к проблеме:

 ctags -x $(ls **/*.py);                  # replace with find if no zsh

предоставит вам базу данных исходных объектов в известном формате, описанном в

 man ctags;                               # make sure you use exuberant ctags!

Gnu Global не ограничивается только типом файлов "из коробки". Любой обычный формат файла будет служить.

Кроме того, вы можете использовать gtags-cscope, который поставляется с global, как упомянуто в разделе 3.7 руководства, для возможного сокращения с помощью gtags. В итоге вы получите ввод табличного файла ctags, который Global / gtags может проанализировать, чтобы получить ваши объекты, или вы можете использовать источник для pycscope вместе с вашим файлом ctags известного формата, чтобы получить ввод для команд vim cscope в

if_cscope.txt.

В любом случае это вполне выполнимо.

Возможно, вы бы предпочли idutils?

Определенно возможно, так как

z3c.recipe.tags

в pypi использует ctags и idutils для создания файлов тегов для компоновки, и этот метод я расскажу в ближайшее время.

Конечно, вы всегда можете использовать приведенный ниже скрипт greputils, он поддерживает idutils, мы знаем, что idutils работает с python, и если это не удастся, то в этом году есть еще что-то под названием vimentry, которое также использует python, idutils и vim .

Справочные ссылки (не полный список):

Надеюсь, это поможет вам в вашей проблеме, я, конечно, помог мне. Мне было бы очень грустно сегодня вечером с помощью личинки.

14 голосов
/ 23 ноября 2010

Мне кажется, это работает:

Перейдите в верхний каталог вашего кода Python.Создайте файл с именем cscope.files:

find . -name '*.py' > cscope.files

cscope -R

. Может потребоваться сначала выполнить cscope -b, если перекрестные ссылки построены неправильно.

9 голосов
/ 23 сентября 2010
  1. Из переписки с сопровождающим cscope этот инструмент не предназначен для работы с Python, и нет планов по реализации этой совместимости. Что бы ни работало сейчас, очевидно, работает по ошибке, и нет никаких обещаний, что оно продолжит работать.
  2. Похоже, я использовал устаревшую версию pycscope. Последняя версия 0.3 поддерживается БД cscope. Автор pycscope сказал мне, что он выяснил формат вывода для БД cscope, прочитав исходный код cscope. Этот формат специально не задокументирован, но, тем не менее, в настоящее время он работает с pycsope 0.3, и это решение я буду использовать.

Я собираюсь принять этот ответ, поскольку, к сожалению, никакой другой ответ не помог, даже после объявления награды. За ответы не проголосовали, поэтому я, честно говоря, понятия не имею, куда пойдет награда.

2 голосов
/ 26 мая 2012

Есть замечательный Python-mode-klen плагин. Если он у вас установлен и веревка (библиотека рефакторинга Python) установлена, то перейти к определению конкретного термина так же просто, как <C-c>g или <C-c>rag (первый - это отображение типа файла, второй - глобальный). Есть намного больше полезных функций, некоторые бесполезные для меня. Все они отключены. Особенности из списка вопросов, найденных на cscope-intro :

  1. Где используется этот символ? f . Хотя это довольно странно, так как результаты в списке быстрых исправлений показывают - вместо реальных строк (хотя они указывают на правильное местоположение). Возможно, это будет исправлено.
  2. Где он определен? , Каково определение этого глобального символа? , Где находится эта функция в исходных файлах? г
  3. Что такое <...> глобальное определение символа? raj

Не очень, но я не слишком опытный пользователь rovivim.

0 голосов
/ 30 марта 2012

У меня тот же вопрос, что и у вас, после просмотра Интернета я нашел способ исправить это:

создать скрипт на python: cscope_scan.py

import os

codeRootDir = os.getcwd()

__revision__ = '0.1'
__author__ = 'lxd'

FILE_TYPE_LIST= ['py']

if __name__ == '__main__':
    import os
    f = open('cscope.files','w')
    for root,dirs,files in os.walk(codeRootDir):
        for file in files:
            for file_type in FILE_TYPE_LIST:
                if file.split('.')[-1] == file_type:
                    f.write('%s\n' %os.path.join(root,file))
    f.close()
    cmd = 'cscope -bk'
    os.system(cmd)

извините этот скрипт в корневой папке вашего кода, он сгенерирует cscope.files, а затем извинит cscope -b Я не знаю, что происходит с моим компьютером, последние две строки не работают, но я думаю, что вручную введите cscope -bk приемлемо:)

...