是否可以更新 emacs rgrep 命令以在整个 nodejs 项目中排除“node_modules”?
Can emacs rgrep command be updated to exclude `node_modules` throughout a nodejs project?
我最近开始使用 emacs 作为我的默认设置 editor/IDE 并且对使用 rgrep 搜索项目中的文本大体上很满意。但是,如果我使用 rgrep,我无法获得排除目录的选项,特别是 node_modules 目录。这会导致更长的搜索时间和大量无关的匹配。
当我在 js2 模式下在 emacs 中使用 rgrep 时,我可以更改基本 rgrep 命令以排除那些目录吗?
最简单的选项是自定义 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
的这个功能:
If an element is a cons cell, the car is called on the search directory
to determine whether cdr should not be recursed into.
原则上,这提供了根据具体情况过滤目录的能力。不过,这不是最容易使用的东西——它需要您 已经 有代码来识别给定目录是否是 node_modules
所在项目的一部分safe/unsafe,并且该代码将再次需要在任何类型的缓冲区中工作,因此您仍在处理一些相同的问题。但是,如果您正在使用其他一些面向项目的库,那么您可能有一些现有的简单方法来建立项目 type,然后您可以将其用于该高级的自定义谓词函数过滤。
从技术上讲,这并没有回答问题。但这可能是解决实际问题的更好方法。
据推测,您已将此项目置于版本控制之下,而您忽略了 node_modules
。如果你在 Emacs 中使用 ripgrep
(https://github.com/BurntSushi/ripgrep) it will automatically exclude anything ignored by the VCS. Also it's way faster than grep
. I prefer rg.el
(https://github.com/dajva/rg.el).
我最近开始使用 emacs 作为我的默认设置 editor/IDE 并且对使用 rgrep 搜索项目中的文本大体上很满意。但是,如果我使用 rgrep,我无法获得排除目录的选项,特别是 node_modules 目录。这会导致更长的搜索时间和大量无关的匹配。
当我在 js2 模式下在 emacs 中使用 rgrep 时,我可以更改基本 rgrep 命令以排除那些目录吗?
最简单的选项是自定义 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
的这个功能:
If an element is a cons cell, the car is called on the search directory to determine whether cdr should not be recursed into.
原则上,这提供了根据具体情况过滤目录的能力。不过,这不是最容易使用的东西——它需要您 已经 有代码来识别给定目录是否是 node_modules
所在项目的一部分safe/unsafe,并且该代码将再次需要在任何类型的缓冲区中工作,因此您仍在处理一些相同的问题。但是,如果您正在使用其他一些面向项目的库,那么您可能有一些现有的简单方法来建立项目 type,然后您可以将其用于该高级的自定义谓词函数过滤。
从技术上讲,这并没有回答问题。但这可能是解决实际问题的更好方法。
据推测,您已将此项目置于版本控制之下,而您忽略了 node_modules
。如果你在 Emacs 中使用 ripgrep
(https://github.com/BurntSushi/ripgrep) it will automatically exclude anything ignored by the VCS. Also it's way faster than grep
. I prefer rg.el
(https://github.com/dajva/rg.el).