如何从Projectile中排除文件?


39

我使用的是前奏中的头盔弹头设置,这对我的工作流程有很大的改进。剩下的唯一问题是自动生成的文件(例如,由CMake生成的文件),这些文件会在helm-grep和类似操作期间显示。

问题:有没有办法从Projectile中排除项目文件夹树中的文件?

Answers:


33

从射弹角度来看,它似乎提供了四种自定义选项,可以全局忽略文件/目录。我在下面列出了他们的每个人,以及他们的文档

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(或射弹的docs的文档

解析项目忽略文件并返回目录以忽略并保留。

返回值将是一个缺点,car是要保留的目录列表,而cdr是要忽略的文件或目录列表。

以+开头的字符串将添加到要保留目录列表中 ,以-开头的字符串将添加到要忽略目录列表中 。为了向后兼容,如果没有 前缀,则该字符串将被视为忽略字符串


2
我无法按projectile-globally-ignored-file-suffixes预期工作(我认为)。它应该只包含后缀(即目标文件的“ o”),文件组(即“ * .o”)还是其他?坦白说,我尝试了所有我能想到的组合,但没有成功。
Bklyn

我在ensime中使用Scala,并且射弹已经将.ensime_cache定义为全局忽略。但是Cc ph会显示头盔弹,并显示所有.ensime_cache文件。有任何想法吗?
Arne


7

另一种解决方案是使用agthe_silver_searcher)或rgripgrep)生成项目文件。这是您可以使用的方法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,您可以轻松进行:)

代码来自kaushalmodi的 emacs配置。


2

搜索尊重忽略的目录/文件:

  1. 安装ack(grep的替代方法。我通过自制软件安装。)

  2. --ignore-case你的~.ackrc文件(假设你要忽略大小写)

  3. 绑定helm-projectile-ack到一个键。我通过以下方式在我的emacs初始化中执行此操作:

(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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.