web-dev-qa-db-ja.com

cscopeを使用してPython VIMでコードを参照しますか?

Pythonコードでcscopeを使用して正常に管理した人はいますか?VIM 7.2と最新バージョンのcscopeをインストールしています、ただし、コードのタグが正しく取得されません(常に数行ずれています)。pycscopeスクリプトを試しましたが、その出力は最新バージョンのcscopeではサポートされていません。

何か案は?または、ブラウジングの代替手段Python VIMを使用したコード?(cscopeの単純なタグ以外にctagsが提供する追加機能に特に興味があります)

17
Eli Bendersky
  1. cscopeのメンテナとのやり取りから、このツールはPythonで動作するように設計されておらず、その互換性を実装する予定はありません。現在機能しているものは、明らかに誤って機能しており、機能し続けるという約束はまったくありません。
  2. pycscopeの古いバージョンを使用しているようです。最新バージョン0.3は、cscopeDBでサポートされています。 pycscopeの作者は、cscopeのソースコードを読んでcscopeDBの出力形式を理解したと私に話しました。その形式は意図的に文書化されていませんが、それでも現在はpycsope 0.3で動作します。これは、私が使用するソリューションです。

残念ながら、報奨金が宣言された後でも他の回答は助けを提供しなかったので、私はこの回答を受け入れるつもりです。賛成の答えはないので、正直なところ、賞金がどこに行くのかわかりません。

9
Eli Bendersky

編集:私はステップバイステップでプロセスを実行するつもりです:

ソースの準備:

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は、「すぐに使える」タイプのファイルだけに限定されていません。通常のファイル形式であればどれでも使用できます。

また、マニュアルのセクション3.7で説明されているようにグローバルに付属しているgtags-cscopeを使用して、gtagsを使用したショートカットを作成することもできます。 Global/gtagsがオブジェクトを取得するために解析できるctags表形式ファイルの入力になります。または、既知の形式のctagsファイルと一緒にpycscopeのソースを使用して、vimcscopeコマンドの入力を取得できます。

if_cscope.txt。

いずれにせよ、それはかなり実行可能です。

おそらくあなたはidutilsを好むでしょうか?

それ以来、間違いなく可能です

z3c.recipe.tags

on pypiは、ctagsとidutilsの両方を使用して、ビルドアウト用のタグファイルを作成します。これは、後で調査する方法です。

もちろん、以下のgreputilsスクリプトをいつでも使用できます。これは、idutilsをサポートしています。idutilsはpythonで動作することがわかっています。それが失敗した場合は、今年からpython、idutils、vimを使用するvimentryと呼ばれるものもあります。

参照リンク(完全なリストではありません):

うまくいけば、これはあなたの問題であなたを助けます、私は確かに私を助けました。私は今夜​​、巨大なpycscopeでかなり悲しかったでしょう。

18
chiggsy

これは私にとってはうまくいくようです:

pythonコードのトップディレクトリに移動します。cscope.filesというファイルを作成します。

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

cscope -R

相互参照が適切に構築されない場合は、最初にcscope -bを実行する必要がある場合があります。

14

素晴らしい Python-mode-klen プラグインがあります。それとrope(pythonリファクタリングライブラリ)がインストールされている場合、特定の用語の定義に進むのは<C-c>gまたは<C-c>ragと同じくらい簡単です(最初はファイルタイプマッピング、2番目はグローバルマッピングです)。もっと便利な機能がありますが、私には役に立たないものもあります。それらはすべて無効にできます。 cscope-in​​tro で見つかった質問のリストからの機能:

  1. この記号はどこで使用されていますか? <C-c>f。ただし、クイックフィックスリストの結果では、実際の行ではなく-が表示されます(ただし、正しい場所を指しているため)。多分それは修正されるでしょう。
  2. どこで定義されていますか?このグローバルシンボルの定義は何ですか?この関数はソースファイルのどこにありますか? <C-c>g
  3. <...>グローバルシンボルの定義は何ですか? <C-c>raj

それほど多くはありませんが、ropevimの使用経験はあまりありません。

2
ZyX

私はあなたが得たのと同じ質問を受けました、インターネットを閲覧した後、私はこれを修正する方法を見つけました:

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が実行されます。コンピュータがどうなるかわかりません。最後の2行はうまく機能していませんが、手動でcscope -bkを入力してもかまいません:)

0
shengy