在几个文件中运行计数匹配

时间:2014-04-03 11:16:48

标签: emacs

有没有办法跨文件使用count-matches

e.g。我希望能够归还没有。我的src目录中所有文件的字符串"foo"的实例数

或者可能对我在dired缓冲区

中标记的所有文件运行计数匹配

1 个答案:

答案 0 :(得分:1)

这是一个简单的交互式功能实现。

它的工作原理是迭代directory-files返回的所有文件,并在文件内容上使用count-matches而不实际打开文件。

以交互方式调用,它将提示输入目录,文件正则表达式和匹配REGEXP。

例如,这将计算src目录中.c文件中出现的所有malloc。

(count-matches-in "./src/" "\\.c$" "\\<malloc\\>")
(defun count-matches-in (dir file-match match)
  "Count all occurrences of regexp MATCH in files whose name matches FILE-MATCH inside DIR.

When called interactively, display the count in the echo area."
  (interactive "DDir: \nsFiles Matching: \nsRegexp: ")
  (with-temp-buffer
    (let ((count (apply '+ (mapcar (lambda (f)
                     (delete-region (point-min) (point-max))
                     (insert-file-contents f)
                     (count-matches match (point-min) (point-max)))
                   (remove-if 'file-directory-p
                          (directory-files dir t file-match))))))
      (when (called-interactively-p) (message "%d occurrences" count))
      count)))    

enter image description here