Как исключить файлы из Projectile?

39

Я использую настройку helm-projectile из prelude, и это значительно улучшило мой рабочий процесс. Единственная оставшаяся проблема - автоматически сгенерированные файлы (например, сгенерированные CMake), которые появляются во время helm-grep и подобных операций.

Вопрос : есть ли способ исключить файлы в дереве папок проектов из Projectile?

начинающий
источник

Ответы:

34

Глядя на снаряд, он предлагает четыре настройки для игнорирования файлов / каталогов во всем мире. Я перечисляю каждого из них ниже, с их документацией

projectile-globally-ignored-files

Список файлов, глобально игнорируемых снарядом.

projectile-globally-ignored-directories

Список каталогов, глобально игнорируемых снарядом.

projectile-globally-ignored-file-suffixes

Список файловых суффиксов глобально игнорируется снарядом.

projectile-globally-ignored-modes

Список регулярных выражений для основных режимов, игнорируемых снарядом.

Если буфер использует данный основной режим, снаряд будет игнорировать его для функций, работающих с буферами.

Обратите внимание, что это глобальные параметры, поэтому, например, каталог в projectile-globally-ignored-directoriesбудет игнорироваться независимо от проекта, с которым вы работаете. Чтобы игнорировать файл / каталог для конкретного проекта, вы можете добавить .projectileфайл в корень проекта и добавить пути, к которым нужно игнорировать префикс, -к нему, как показано ниже

-/CMake

Смотрите документацию projectile-parse-dirconfig-file(или документы снаряда ) для получения дополнительной информации

Разобрать проект игнорировать файл и вернуть каталоги, чтобы игнорировать и сохранить.

Возвращаемое значение будет минусом, автомобиль - это список каталогов, которые нужно сохранить, а cdr - это список файлов или каталогов, которые нужно игнорировать.

Строки, начинающиеся с +, будут добавлены в список каталогов для хранения , а строки, начинающиеся с -, будут добавлены в список каталогов, которые следует игнорировать . Для обратной совместимости, без префикса строка будет считаться строкой игнорирования .

Икбал Ансари
источник
2
Я не могу приступить projectile-globally-ignored-file-suffixesк работе, как мне кажется. Должен ли он содержать только суффикс (то есть «o» для объектных файлов), глобус файла (то есть «* .o») или что-то еще? Честно говоря, я перепробовал все комбо, которые только мог придумать, и это не сработало.
Bklyn
Я использую Scala с ensime, и снаряд уже определяет .ensime_cache как глобально игнорируемый. Однако Cc ph вызывает helm-projectile и показывает все файлы .ensime_cache. Любые идеи?
Арне
7

Другое решение - использовать ag( the_silver_searcher ) или rg( ripgrep ) для создания файлов проекта. Вот как вы можете сделать это с rg:

(setq projectile-enable-caching t)

;;; Default rg arguments
  ;; https://github.com/BurntSushi/ripgrep
  (when (executable-find "rg")
    (progn
      (defconst modi/rg-arguments
        `("--line-number"                     ; line numbers
          "--smart-case"
          "--follow"                          ; follow symlinks
          "--mmap")                           ; apply memory map optimization when possible
        "Default rg arguments used in the functions in `projectile' package.")

      (defun modi/advice-projectile-use-rg ()
        "Always use `rg' for getting a list of all files in the project."
        (mapconcat 'identity
                   (append '("\\rg") ; used unaliased version of `rg': \rg
                           modi/rg-arguments
                           '("--null" ; output null separated results,
                             "--files")) ; get file names matching the regex '' (all files)
                   " "))

      (advice-add 'projectile-get-ext-command :override #'modi/advice-projectile-use-rg)))

В каталоге вашего проекта укажите файлы, которые вы хотите игнорировать, .gitignoreи все готово :)

Код взят из конфига emacs Каушальмоди .

Чакраварти Рагхунандан
источник
2

поиск, который учитывает игнорируемые каталоги / файлы:

  1. установить ack(альтернатива grep. Я устанавливаю через homebrew.)

  2. положить --ignore-caseв ~.ackrcфайл (если вы хотите игнорировать регистр)

  3. привязать helm-projectile-ackк ключу. Я делаю это в моем emacs init через:

(use-package helm
  ...
  :bind (...
         ("C-c p s a" . helm-projectile-ack)
        )
  ...
)
  1. создать .projectileфайл. Например,
-.dot
-.jcs
-.svg
-.txt

использование

C-c p s a     ;; search that respects .projectile ignore

или

C-c s p g     ;; search everything
haroldcarr
источник