我在项目路径中创建了一个ctag文件:
/home/zen/zen_project
我可以轻松地跳转到这个项目中。
但是,当我想跳转到内置模块方法(或安装在sys路径下)时,例如龙卷风。 我无法做到。
我尝试在龙卷风路径中构建另一个标记文件,但这只能启用龙卷风文件本身之间的跳转。我仍然无法从我的项目文件跳转到龙卷风文件。
是否可以使用vim和ctag进行此类跳转,该怎么做?
答案 0 :(得分:3)
您的项目根目录中应该有一个tags
文件,Tornado根目录中应该有一个'tags'
文件。使用~/.vimrc
选项的默认值,Vim将获取当前目录和当前文件中的文件。
您需要明确指定其他任何位置,例如将其放入:set tags+=/path/to/tornado/tags
:
:echo tagfiles()
要检查考虑哪些标记文件,您可以使用:
{{1}}
答案 1 :(得分:1)
我个人使用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返回项目。
E.g。有关Python源代码的示例:
您可以使用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)
希望有所帮助。