Использование cscope для просмотра кода Python с помощью VIM?

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

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

Ответы

Ответ 1

  • Из соответствия с сопровождающим cscope этот инструмент не предназначен для работы с Python, и нет никаких планов по реализации этой совместимости. Что бы ни работало сейчас, очевидно, работает по ошибке, и нет никаких обещаний, что он будет продолжать работать.
  • Кажется, я использовал устаревшую версию pycscope. Последняя версия 0.3 поддерживается DB cscope. Автор pycscope сказал мне, что он вычислил выходной формат для cscope DB, прочитав исходный код cscope. Этот формат не документирован специально, но тем не менее он в настоящее время работает с pycsope 0,3, который является решением, которое я буду использовать.

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

Ответ 2

РЕДАКТОР: Я буду проходить шаг за шагом:

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

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, который поставляется с глобальным, как указано в разделе 3.7 руководства, для возможной ярлыки с использованием gtags. В итоге вы получите входной файл ctags tabular, который Global/gtags может проанализировать для получения ваших объектов, или вы можете использовать источник для pycscope вместе с вашим файлом ctags известного формата, чтобы получить вход для команд vsc cscope в

if_cscope.txt.

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

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

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

z3c.recipe.tags

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

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

Ссылки (не полный список):

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

Ответ 3

Кажется, это работает для меня:

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

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

cscope -R

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

Ответ 4

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

  • Где используется этот символ? <C-c>f. Скорее сбив с толку, так как результаты в списке quickfix показывают - вместо фактических строк (хотя они указывают на правильное местоположение). Возможно, это будет исправлено.
  • Где это определено?, Что это за определение глобального символа?, Где эта функция в исходных файлах? <C-c>g
  • Что такое <... > определение глобального символа? <C-c>raj

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

Ответ 5

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

создать python script: 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)

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