有没有办法跨文件使用count-matches
?
e.g。我希望能够归还没有。我的src目录中所有文件的字符串"foo"
的实例数
或者可能对我在dired
缓冲区
答案 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)))