我最近开始使用emacs作为我的默认编辑器/ IDE,并且对使用rgrep搜索项目中的文本通常很满意。但是,如果我使用rgrep,则无法排除目录,特别是node_modules目录。这样可以延长搜索时间,并带来大量无关的点击。
当我处于js2模式时,可以在emacs中使用rgrep时更改基本rgrep命令以排除那些目录吗?
答案 0 :(得分:1)
最简单的选择是自定义grep-find-ignored-directories
用户选项。
您可能不想将此限制为js2-mode
。如果您被以这种方式进行约束,则可能会遇到类似这样的情况:
(add-hook 'js2-mode-hook 'my-js2-mode-hook)
(defun my-js2-mode-hook ()
"Custom behaviours for `js2-mode'."
(require 'grep)
(setq-local grep-find-ignored-directories
(cons "node_modules" (default-value 'grep-find-ignored-directories))))
但是,肯定会有其他缓冲区,您可能会从这些缓冲区中启动rgrep
,而它们仍在同一项目中。
目录局部变量提供了另一种方法(可以简单地解决项目中的所有文件访问缓冲区,但仅适用于某些非文件访问缓冲区)。
在实践中,除非您认为node_modules
可能是您想要在某些项目类型中进行搜索的目录名,否则我倾向于只设置全局值。
我还将引用grep-find-ignored-directories
的此功能:
如果元素是约束单元格,则在搜索目录中调用汽车 以确定是否不应将cdr递归到其中。
原则上,这提供了根据情况过滤目录的功能。不过,这并不是最容易使用的方法-它需要您已经已经使用代码来识别给定目录是否属于node_modules
安全/不安全的项目的一部分,并且该代码将再次需要在任何类型的缓冲区中工作,因此您仍在处理一些相同的问题。但是,如果您使用其他一些面向项目的库,则可能有一些现有的简单方法来建立项目 type ,然后可以在自定义谓词函数中使用该高级过滤功能。< / p>
答案 1 :(得分:1)
从技术上讲,这不能回答问题。但这可能是解决实际问题的更好解决方案。
想必您已经在版本控制下控制了这个项目,而您已经忽略了node_modules
。如果使用ripgrep
(https://github.com/BurntSushi/ripgrep),它将自动排除VCS忽略的所有内容。而且它比grep
更快。我更喜欢Emacs中的rg.el
(https://github.com/dajva/rg.el)。