Открыть список файлов при определении функции в Vim - PullRequest
0 голосов
/ 18 января 2012

Допустим, у меня есть несколько файлов в моем исходном дереве, которые содержат определение для метода FindThisMethod().Я хотел бы открыть все эти файлы в одном экземпляре gVim, в отдельных буферах, с курсором в строке определения метода.

В Windows XP с использованием Cygwin я пробовал что-то вроде:

gvim --remote-silent `grep -rnl --include=*.cs 'void FindThisMethod()' *`

Это загрузит все правильные файлы в vim, но я все еще не уверен, как получить курсор на строку, совпадающую с grep.Поскольку vim поддерживает синтаксис gvim +<line number> file.txt, я попытался объединить awk с grep, чтобы получить список номеров строк и имен файлов:

grep -rn --include=*.cs "void FindThisMethod()' * | gawk -F: '{print "+"$2" "$1}'

, который выдает:

+123 file.cs
+234 file2.cs
+345 file3.cs

Но я 'Я не уверен, как использовать это с gvim, чтобы открыть файлы по заданным строкам.Я попытался передать этот вывод на xargs -L 1 gvim --remote-silent, но это не сработало, так как не удалось запустить бинарный файл gvim для Windows из xargs.

Должен быть лучший способ:)

Ответы [ 2 ]

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

Возможно, вам лучше использовать встроенный grep vim, который сделает это за вас

gvim --remote...etc...etc '+grep --include=*.cs "void FindThisMethod()" *'

см.

:help :grep

для получения дополнительной информации

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

Если вы хотите использовать уже используемый grep, вы можете сделать:

grep -rn --include=*.cs "void FindThisMethod()' > quick.txt

gvim -q quick.txt

Это загрузит результаты grep в быстрый список vim, что позволит вам выполнить «copen» для просмотра каждого поискового совпадения в мини-окне, «cn» для перехода к следующему, «cp» для перехода к предыдущему.

Try: "help quickfix"

Однако, что может быть лучше, чем grep, так это использовать vim с cscope. Cscope хорошо интегрируется с vim, создает базу данных, которая позволяет вам видеть, например, каждую функцию с именем «myfunc» (: cs f s myfunc) или каждую функцию, вызывающую myfunc (: cs f c myfunc). Это также интегрируется с окном быстрого исправления, позволяющим вам перемещаться по результатам.

Try: "help cscope"
...