Поиск файлов: получение занесенного в буфер содержимого файлов, указанных фильтром, содержащим текст - PullRequest
3 голосов
/ 18 января 2010

Это похоже на довольно типичный вариант использования, но я буду проклят, если смогу разобраться.Там должно быть что-то фундаментальное, что я скучаю.

find-dired - это, по сути, внешний интерфейс для команды find, которая выдает буфер результатов dired

find-grep-dired, похоже, больше похож на интерфейс для grep, чемнаходить.и выдает dired-буфер, но он ищет все файлы в дереве каталогов.

Мне нужна возможность начать с заданного пути и искать * .css для # some-id, чтобы он дал мнеDired-буфер для дальнейшей обработки.

Кажется, все кусочки есть, но я не разобрался.Так что я думаю, что это что-то фундаментальное, что я мог пропустить.

Ответы [ 4 ]

3 голосов
/ 26 августа 2013

Это немного поздно, но вот функция emacs-lisp, которую я регулярно использую:

(defun find-iname-grep-dired (dir pattern regexp)
  (interactive
   "DFind-name (directory): \nsFind-name (filename wildcard): \nsFind-grep (grep regexp): ")
  (find-dired dir (concat "-iname " (shell-quote-argument pattern) " "
                          "-type f -exec " grep-program " " find-grep-options " -e "
                          (shell-quote-argument regexp) " "
                          (shell-quote-argument "{}") " "
                          (shell-quote-argument ";"))))

Сочетает find-grep-dired и find-name-dired с учетом имени файла без учета регистра.

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

Звучит так, как будто вы ищете функцию grep . Она вызовет утилиту grep с выражением, которое вы ей дадите, и соберет вывод в интерактивный буфер. Вы можете выбрать любую из строк совпадения в буфере, чтобы перейти к той строке в файле, из которого найдено совпадение.

Например, если вы запустите M-x grep, вы должны получить следующее приглашение в мини-буфере:

Run grep (like this): grep -n

Затем вы добавляете шаблон регулярного выражения и глобуса, который хотите передать в grep:

Run grep (like this): grep -n #some-id *.css

И он должен дать вам список совпадений для #some-id во всех файлах, совпадающих с *.css в текущем каталоге. Если вы хотите проходить через подкаталоги, тогда вам нужно использовать rgrep вместо grep. Похоже ли это на то, что вы ищете, или я полностью неправильно понял ваш запрос?

1 голос
/ 05 июня 2015

Вы сказали (в комментарии):

единственное, чего не хватает, это выводить в буфер с задержкой , чтобы я мог делать такие вещи, как выбор / перемещение / копирование всех этих файлов одновременно

Извините, я не видел этот вопрос до сих пор. Эта функция доступна с Dired + . Команда diredp-grepped-files-other-window открывает Dired для файлов, обозначенных grep попаданиями. (Это также работает для любого другого режима, полученного из compilation-mode.)

1 голос
/ 19 января 2010

Я дам кредит А. Леви.Но я думаю, что понял это.Кажется, что find-dired - действительно инструмент для этой работы, но на моей машине с Windows он не заполняет аргументы "-exec grep", и я даже не задумываюсь над этим.Однако мой linux-аппарат предварительно заполняет его grep.

Итак ....

  #on Linux
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): -type f -exec grep -q -e \{\} \; 

  #on windows
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): 

  #Solution
  M-x find-dired
  Run Find in Directory: <current_path> 
  Run find(with args): -type f -iname "*.css" -exec grep -q -e #some-id \{\} \; 
...