LINUX.ORG.RU

projectile поиск файлов silver searcher + фильтрация

 ,


0

1

Для поиска слов есть helm-ag. Для поиска файлов сейчас используется helm-projectile-find-file-dwim. Вот с ним как раз и проблемы c фильтрованием(к примеру отфильтровать __init__.py или директорию) . Во-первых, при

(setq projectile-indexing-method 'alien) (что проставлено по дефолту)

projectile смотрит в .gitignore или .hgignore. Т.е, чтобы исключить __init__.py, мне нужно его добавить в .gitignore. Но я же не могу этого сделать, верно? Так же при alien игнорируется .projectile с инструкциями вида

- /path/to/somefile

При этом игнорируются переменные вида

projectile-globally-ignored-directories
projectile-globally-ignored-files
projectile-globally-ignored-file-suffixes

При

(setq projectile-indexing-method 'native)

Используется бекенд для поиска find

find . -type f -print0
Который тоже игнорирует .projectile и переменные
projectile-globally-ignored-directories
projectile-globally-ignored-files
projectile-globally-ignored-file-suffixes

К тому же нельзя переопределить бекенд поиска с помощью projectile-generic-command, допустим, на ag

(setq projectile-generic-command "ag . --hidden -l -0 --nocolor --nogroup --ignore '.env' --ignore '.hg' --ignore 'node_modules' --ignore '.gitignore' --ignore '__init__.py'")

Но при этом бекенд можно переопределить на

 
(setq projectile-indexing-method 'alien)
(setq projectile-indexing-method 'hybrid)

Но при этом при поиске файлов в выдаче отсутствует начальный слеш у файлов т.е

home/some/some/filename
home/some/some/filename1
т.е при открытии файла при поиске emacs предлагает вместо открытого файла создать новый

Но опять же при этом игнорируется

.projectile
projectile-globally-ignored-directories
projectile-globally-ignored-files
projectile-globally-ignored-file-suffixes

Казалось бы, простая задача: проставить бекенд и профильтровать выдачу, но не получается это сделать. Для чего это всё?

  1. я хочу использовать ag для поиска файлов т.к это быстрей. Если можно быстрей, зачем использовать то, что медленней(find)
  2. при поиске мне не хотелось видеть в выдаче некоторые директории и файлы(допустим __init__.py)
  3. желательно, чтобы можно было и глобально и локально объявлять exclud'ы, чтобы можно было более гибко рулить всем этим(к примеру, в .projectile исключать только то, что конкретно в этом проекте, а в global исключить .env)

Ответ на: комментарий от Xwo

Ну, во-первых, native не использует find, это именно нативная реализация на elisp. alien от hybrid отличается только тем, что hybrid дополнительно пропускает список через сортировку-фильтр, и оба эти варианта используют projectile-generic-command только в случае когда проект не под vcs. Под vcs используются projectile-git-command, projectile-hg-command и т.д.

Ты жопой что-ли читал? В общем тебе нужно либо подсунуть свой велосипед в projectile-git-command, либо использовать hybrid и свой вариант сортировки-фильтра.

no-such-file ★★★★★ ()