vim 之ptags.py

在看ctags的帮助文档时看到了ptags.py,专为python生成tags.具体目录位于python源代码的Tools/scripts/ptags.py。自己可以到Python官网下载

源代码,解压提取ptags.py放在path变量搜索的目录里。Python2.x和Python3.x都有对应的ptags.py ,其实这里面的原理是一样的,根本不涉及到2.x和3.x之间有差异的语法,而且生成的tags文件也主要是针对类和函数(class and def)所以,没有什么区别,完全可以在想声称python3.x的tags时,使用python2.x的pytags。

 

我的机器上放置的位置为:Debian Squeeze/Wheezy/Sid  --> /usr/local/bin

                                                Mandriva /openSUSE  ------------->$HOME/bin

 

 

 

[wolf@localhost tmp]$ diff ptags.py ptags3.py 1c1 < #! /usr/bin/env python --- > #! /usr/bin/env python3 ##就只有那么点差异而已,解释器使用的不一样而已。

 

ptags.py(for python2.x):

#! /usr/bin/env python # ptags # # Create a tags file for Python programs, usable with vi. # Tagged are: # - functions (even inside other defs or classes) # - classes # - filenames # Warns about files it cannot open. # No warnings about duplicate tags. import sys, re, os tags = [] # Modified global variable! def main(): args = sys.argv[1:] for filename in args: treat_file(filename) if tags: fp = open('tags', 'w') tags.sort() for s in tags: fp.write(s) expr = '^[ /t]*(def|class)[ /t]+([a-zA-Z0-9_]+)[ /t]*[:/(]' matcher = re.compile(expr) def treat_file(filename): try: fp = open(filename, 'r') except: sys.stderr.write('Cannot open %s/n' % filename) return base = os.path.basename(filename) if base[-3:] == '.py': base = base[:-3] s = base + '/t' + filename + '/t' + '1/n' tags.append(s) while 1: line = fp.readline() if not line: break m = matcher.match(line) if m: content = m.group(0) name = m.group(2) s = name + '/t' + filename + '/t/^' + content + '//n' tags.append(s) if __name__ == '__main__': main()

 

ptags.py(for python3.x)

 

#! /usr/bin/env python3 # ptags # # Create a tags file for Python programs, usable with vi. # Tagged are: # - functions (even inside other defs or classes) # - classes # - filenames # Warns about files it cannot open. # No warnings about duplicate tags. import sys, re, os tags = [] # Modified global variable! def main(): args = sys.argv[1:] for filename in args: treat_file(filename) if tags: fp = open('tags', 'w') tags.sort() for s in tags: fp.write(s) expr = '^[ /t]*(def|class)[ /t]+([a-zA-Z0-9_]+)[ /t]*[:/(]' matcher = re.compile(expr) def treat_file(filename): try: fp = open(filename, 'r') except: sys.stderr.write('Cannot open %s/n' % filename) return base = os.path.basename(filename) if base[-3:] == '.py': base = base[:-3] s = base + '/t' + filename + '/t' + '1/n' tags.append(s) while 1: line = fp.readline() if not line: break m = matcher.match(line) if m: content = m.group(0) name = m.group(2) s = name + '/t' + filename + '/t/^' + content + '//n' tags.append(s) if __name__ == '__main__': main()

 

 

你可能感兴趣的:(vim 之ptags.py)