Использование 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
допустим:)