emacs rgrep命令可以更新为在整个nodejs项目中排除`node_modules`吗?

时间:2020-04-13 12:45:02

标签: node.js emacs

我最近开始使用emacs作为我的默认编辑器/ IDE,并且对使用rgrep搜索项目中的文本通常很满意。但是,如果我使用rgrep,则无法排除目录,特别是node_modules目录。这样可以延长搜索时间,并带来大量无关的点击。

当我处于js2模式时,可以在emacs中使用rgrep时更改基本rgrep命令以排除那些目录吗?

2 个答案:

答案 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。如果使用ripgrephttps://github.com/BurntSushi/ripgrep),它将自动排除VCS忽略的所有内容。而且它比grep更快。我更喜欢Emacs中的rg.elhttps://github.com/dajva/rg.el)。