Emacs find-grep-dired затем автоматически переходит вперед на заданное регулярное выражение - PullRequest
3 голосов
/ 11 февраля 2011

Я обычно делаю find-grep-dired, чтобы найти выражение в каталоге проекта.Это дает мне хороший dired вид всех файлов, которые содержат это выражение.Но мой следующий шаг - неизменно открыть один из этих файлов и выполнить isearch-forward с тем же поисковым выражением.Как я могу уберечь себя от ввода поисковых слов дважды каждый раз (или более двух раз, если я хочу отредактировать несколько файлов)?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2011

Это должно работать для вас:

  1. Запуск find-grep-dired как обычно
  2. Нажмите * t (Dired-Tog-mark), чтобы отметить все файлы.
  3. Нажмите A , чтобы начать dired-do-search. При появлении запроса вместо ввода нажмите M-p , это вызовет регулярное выражение find-grep, поскольку обе функции используют один и тот же список истории запросов
  4. Вы попадете на первый матч в первом файле. Вот забавная часть, просто нажмите M -, , чтобы перейти к следующему совпадению, охватывающему все ваши совпадающие файлы.
  5. Прибыль? (извините, не смог устоять)

И если вы хотите все это одним выстрелом, вот, пожалуйста:

(defun find-grep-dired-do-search (dir regexp)
  "First perform `find-grep-dired', and wait for it to finish.
Then, using the same REGEXP as provided to `find-grep-dired',
perform `dired-do-search' on all files in the *Find* buffer."
  (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
  (find-grep-dired dir regexp)
  (while (get-buffer-process (get-buffer "*Find*"))
    (sit-for 1))
  (with-current-buffer "*Find*"
    (dired-toggle-marks)
    (dired-do-search regexp)))
3 голосов
/ 11 февраля 2011

Вы можете сохранить строку поиска, которую вы используете в find-grep-dired, в списке уничтожений (C-SPACE Ca Mw).Затем вы выполняете поиск в файлах, используя строку из списка уничтожений (Cs My).Моя дергает последнюю строку убитого текста.

Вы можете отобразить другие (полезные) привязки для переадресации, используя Ch k Cs.

2 голосов
/ 11 февраля 2011

Как насчет другого подхода? Попробуйте использовать M-x igrep-find из пакета igrep.el.

По умолчанию он ищет всех вхождений шаблона, но вы можете изменить поведение, чтобы просто найти первое такое вхождение с помощью:

(setq igrep-options "-i -m 1")   ;; I like -i for case-insensitivity

Это приведет к буферу стиля компиляции *1013* (с именем *igrep*) с одной строкой для каждого файла, и когда вы щелкнете по строке (или выполните Cx `) , вы автоматически попадете на линию, в которой есть совпадение. Кроме того, вы можете увидеть соответствующую строку в буфере *igrep*.

Очевидно, что если вы хотите увидеть более одного совпадения на файл, измените число после -m или вообще пропустите эту часть.

...