vim 如何使用ctag浏览内置的python源代码?

zsohkypk  于 2022-11-11  发布在  Python
关注(0)|答案(3)|浏览(175)

我在我的项目路径中创建了ctag文件:

/home/zen/zen_project

而且我可以很容易地跳到这个项目中。
但是无论如何,当我想跳转到builtin模块方法(或者安装在sys路径下)时,比如tornado.我做不到。
我试着在龙卷风路径中建立另一个标记文件,但这只允许在龙卷风文件本身之间跳转。我仍然不能从我的项目文件跳转到龙卷风文件。
有没有可能用vim和ctag做这样的跳转,怎么做?

djp7away

djp7away1#

我个人使用cscope而不是ctags来索引我的项目,因为它的功能更强大。Vim支持它。您可以从项目目录中的文件生成索引,然后可以在Vim中(或通过shell)使用命令:

:cscope add /path/to/cscope-database-index # add the database index file
:cscope find f os.py # find file
:cscope find s system # find symbol
:cscope find t TODO # find text string
:cscope find g rmdir # find definition

如果你想添加Python语言的源代码或者某个模块(比如tornado),你需要索引源目录,然后使用cscope add添加索引。Cscope可以一次添加数据库索引,这样你就可以跳转到你的模块文件,然后使用Ctrl+o返回到你的项目。
例如,对于Python源代码的示例:
1.从https://www.python.org/download/获取源代码的压缩包(例如https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz)。
1.使用cscope -R或类似于我所包含的脚本来解压缩该文件夹并在该文件夹中生成数据库。

  1. cscope手动添加数据库索引,或者设置Vim让cscope在BufRead上自动添加源。另外,Vim应该在当前目录中选择一个cscope数据库。
    您可以使用http://cscope.sourceforge.net/cscope_vim_tutorial.html中的cscope_maps.vim为上述命令添加快捷键。
    我使用下面的脚本在当前目录中生成我的数据库(您可能只对.py文件感兴趣):

# !/usr/bin/python

import os
import pdb
import time
import sys

INCLUDED_FILES = ['.py', '.rb', '.java', '.c', '.h', '.cpp', '.cc', '.hpp', '.html', '.js', '.mk', '.xml', '.idl']
EXCLUDED_DIRS = ['.git', '.repo', 'out', '.svn']
OUTPUT_FILE = 'cscope.files'

start_time = time.time()
output_file = open(OUTPUT_FILE, 'w')

current_path = os.path.abspath('.')

for root, dirs, files in os.walk(current_path):
    for directory in EXCLUDED_DIRS:
        if directory in dirs:
            dirs.remove(directory)

    for filename in files:
        name, extension = os.path.splitext(filename)
        if extension in INCLUDED_FILES:
            file_path = os.path.join(root, filename)
            output_file.write('"%s"' % file_path + "\n")
            print(file_path)

# -b: just build

# -q: create inverted index

cmd = 'cscope -b -q'
print(cmd)
os.system(cmd)

elapsed_time = time.time() - start_time
print("\nGeneration of cscope database took: %.3f secs" % elapsed_time)

希望能有所帮助。

v8wbuo2f

v8wbuo2f2#

这是一个老问题,但这是我在Linux中使用virtualenv的方法。
1.创建一个新的虚拟环境并对其进行源定位
mkdir test_python
cd test_python
python3 -m venv venv_test
source venv_test/bin/activate
1.以递归方式创建ctags
ctags -R .

如果你打开vim,它现在应该可以工作了。只要进入一个功能,按<C-]>进入它。<C-o>返回,<C-i>前进。

4dc9hkyq

4dc9hkyq3#

在项目根目录下应该有一个tags文件,在Tornado根目录下也应该有一个tags文件。
您需要显式地将任何其他位置添加到它,例如,通过将this放入您的~/.vimrc

:set tags+=/path/to/tornado/tags

要检查考虑哪些标记文件,可以用途:

:echo tagfiles()

相关问题