Можно ли обновить команду emacs rgrep, чтобы исключить `node_modules` из проекта nodejs? - PullRequest
1 голос
/ 13 апреля 2020

Я недавно начал использовать emacs в качестве редактора / IDE по умолчанию и в целом был доволен использованием rgrep для поиска проектов по тексту. Но если я использую rgrep, у меня не будет возможности исключить каталоги, в частности каталоги node_modules. Это приводит к более длительным поискам и большому количеству посторонних обращений.

Могу ли я изменить команду base rgrep, чтобы исключить эти каталоги при использовании rgrep в emacs, когда я нахожусь в режиме js2?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Технически, это не отвечает на вопрос. Но, возможно, это лучшее решение для реальной проблемы.

Предположительно, у вас есть этот проект под контролем версий, и вы проигнорировали node_modules. Если вы используете ripgrep (https://github.com/BurntSushi/ripgrep), это автоматически исключит все, что игнорируется VCS. И это намного быстрее, чем grep. Я предпочитаю rg.el (https://github.com/dajva/rg.el) в Emacs.

0 голосов
/ 14 апреля 2020

Самый простой вариант - настроить пользовательский параметр grep-find-ignored-directories.

Возможно, вы не захотите ограничивать его значением js2-mode. Если вы были , чтобы ограничить это таким образом, вы могли бы go что-то вроде:

(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:

Если элемент является cons-ячейкой, автомобиль вызывается из каталога поиска, чтобы определить, не должен ли быть cdr.

В принципе это дает возможность фильтровать каталоги в каждом конкретном случае. Однако это не самая простая вещь для использования - для этого необходимо, чтобы у уже был код, позволяющий определить, является ли данный каталог частью проекта, для которого node_modules был безопасным / небезопасным, и что Код снова должен работать в буфере любого типа, поэтому вы все еще сталкиваетесь с некоторыми из тех же проблем. Если бы вы использовали некоторые другие проектно-ориентированные библиотеки, то у вас мог бы быть какой-то существующий простой способ создания проекта type , который затем можно было бы использовать в пользовательской функции предиката для этой расширенной фильтрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...