Wie kann ich Dateien von Projectile ausschließen?

39

Ich verwende das Helmprojektil-Setup aus dem Auftakt und es hat meinen Workflow enorm verbessert. Das einzige verbleibende Problem sind automatisch generierte Dateien (z. B. von CMake generiert), die während helm-grep und ähnlichen Vorgängen angezeigt werden.

Frage : Gibt es eine Möglichkeit, Dateien in der Projektordnerstruktur von Projectile auszuschließen?

Anfänger
quelle

Antworten:

33

Wenn man sich das Projektil anschaut, scheint es vier Anpassungen für das globale Ignorieren von Dateien / Verzeichnissen zu bieten. Ich liste jeden von ihnen unten mit ihrer Dokumentation auf

projectile-globally-ignored-files

Eine Liste von Dateien, die von projectile global ignoriert werden.

projectile-globally-ignored-directories

Eine Liste von Verzeichnissen, die von projectile global ignoriert werden.

projectile-globally-ignored-file-suffixes

Eine Liste von Dateisuffixen, die vom Projektil global ignoriert werden.

projectile-globally-ignored-modes

Eine Liste der regulären Ausdrücke für Hauptmodi, die vom Projektil ignoriert werden.

Wenn ein Puffer einen bestimmten Hauptmodus verwendet, wird er von Projectile für Funktionen, die mit Puffern arbeiten, ignoriert.

Beachten Sie, dass dies globale Optionen sind, sodass beispielsweise ein Verzeichnis in projectile-globally-ignored-directoriesignoriert wird, unabhängig davon, mit welchem ​​Projekt Sie arbeiten. Um eine Datei / ein Verzeichnis für ein bestimmtes Projekt zu ignorieren, können Sie .projectiledem Stammverzeichnis des Projekts eine Datei hinzufügen und die zu ignorierenden Pfade -wie folgt voranstellen

-/CMake

Weitere Informationen finden Sie in der Dokumentation projectile-parse-dirconfig-file(oder in den Dokumenten des Projektils )

Analysieren Sie die Projekt-Ignorierdatei und geben Sie die zu ignorierenden und zu behaltenden Verzeichnisse zurück.

Der Rückgabewert ist ein Nachteil, wobei das Auto die Liste der zu behaltenden Verzeichnisse und die CDR die Liste der zu ignorierenden Dateien oder Verzeichnisse ist.

Zeichenfolgen, die mit + beginnen , werden zur Liste der zu speichernden Verzeichnisse hinzugefügt , und Zeichenfolgen, die mit - beginnen , werden zur Liste der zu ignorierenden Verzeichnisse hinzugefügt . Aus Gründen der Abwärtskompatibilität wird ohne Präfix davon ausgegangen, dass es sich bei der Zeichenfolge um eine ignorierte Zeichenfolge handelt .

Iqbal Ansari
quelle
2
Ich bin nicht in der Lage, projectile-globally-ignored-file-suffixeszur Arbeit zu kommen , wie (ich denke) es beabsichtigt ist. Sollte dies nur das Suffix (dh "o" für Objektdateien), ein Dateiglob (dh "* .o") oder etwas anderes enthalten? Ehrlich gesagt habe ich jede Kombination ausprobiert, die mir einfällt, und es hat nicht funktioniert.
Bklyn
Ich verwende Scala mit ensime und projectile definiert .ensime_cache bereits als global ignoriert. Cc ph ruft jedoch helm-projectile auf und zeigt alle .ensime_cache-Dateien an. Irgendwelche Ideen?
Arne
23

Ja, geben Sie in Ihrer .projectileDatei in jeder Zeile Folgendes an: Jede Zeile sieht folgendermaßen aus:

- /path/to/somefile

Jede Zeile enthält einen Dateipfad.

Informationen zum Ignorieren von Dateien finden Sie in der offiziellen Dokumentation

robbyoconnor
quelle
7

Eine andere Lösung wäre, ag( the_silver_searcher ) oder rg( ripgrep ) zu verwenden, um Projektdateien zu generieren. Hier ist, wie Sie es machen können 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)))

Geben Sie in Ihrem Projektverzeichnis die Dateien an, die Sie ignorieren möchten, .gitignoreund los geht's :)

Der Code stammt aus der emacs-Konfiguration von kaushalmodi .

Chakravarthy Raghunandan
quelle
2

Suche, die ignorierte Verzeichnisse / Dateien berücksichtigt:

  1. install ack(Eine Alternative zu grep. Ich installiere über Homebrew.)

  2. setzen --ignore-casein Ihrer ~.ackrcDatei (vorausgesetzt , Sie Fall ignoriert werden sollen)

  3. helm-projectile-ackan einen Schlüssel binden . Ich mache das in meinem Emacs Init über:

(use-package helm
  ...
  :bind (...
         ("C-c p s a" . helm-projectile-ack)
        )
  ...
)
  1. Erstellen Sie eine .projectileDatei. Z.B,
-.dot
-.jcs
-.svg
-.txt

verwenden

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

oder

C-c s p g     ;; search everything
haroldcarr
quelle