Команда Vim для поиска всех имен функций, которые содержат строку в своем теле, в исходном файле PHP - PullRequest
1 голос
/ 17 января 2012

Как я могу сгенерировать в VIM список имен функций из исходного файла PHP, которые содержат определенную строку в своем теле?

Ответы [ 2 ]

1 голос
/ 17 января 2012

Вы должны проверить ctags .Создайте файл тега для исходного файла (или всего проекта) и используйте, например, :ts /hello, чтобы найти все функции (или классы), которые имеют hello в своем имени.

0 голосов
/ 18 января 2012

Как насчет программы на Python?Обратите внимание, что вы должны заменить некоторые из них на PLY ....

#!/usr/bin/env python
'''
Project: Python parser to search php functions for regex
Author: Spencer Rathbun
Date: 1/17/2012

Summary: Search glob files (assumed to be php source) for input regex, and list function and line numbers where found.
'''
import re, argparse
from glob import glob
def main(regex, infiles):
    theRegex = re.compile(regex)
    currFunction = ''

    for globFile in infiles:
        for f in glob(globFile):
            with open(f,'rb') as currFile:
                for lineNum, line in enumerate(currFile.readlines()):
                    if line.split(' ')[0] == 'function':
                        currFunction = line.split(' ')[1].split('(')[0]
                    if theRegex.search(line) != None:
                        print("In function {0}\n\tLine {1}: {2}".format(currFunction, lineNum+1, line))


if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Search php source code for regex', version='%(prog)s 1.0')
    parser.add_argument('regex', type=str, default='', help='Regular expression')
    parser.add_argument('infiles', nargs='+', type=str, help='list of input files')
    args = parser.parse_args()
    main(args.regex, args.infiles)

Добавьте их в ~/bin и сделайте их исполняемыми.Затем в vim вы можете позвонить с помощью :!phpSearch.py yourRegex yourGlobPat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...