Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

19.05.2023

projectile

По ходу, в проджектайле много всего добавилось за то время, пока я в доки не заглядывала. Правда, кажется, мне не особо это надо :))

Проект — это каталог, в котором содержится специальный файл: либо .projectile, либо файлы/каталоги, по которым можно узнать репозиторий какой-то vcs, либо ещё какие-то незнакомые мне варианты. У меня обычно проект в git. Впрочем, .projectile тоже активно использую.

Я упоминаю тут сильно не всё, только то, что сама хотела либо помнить, либо держать под рукой.

Про установку

http://projectile.readthedocs.io/en/latest/installation/ или https://projectile.mx/

Существенно, что projectile в какой-то момент перестал назначать кнопочки по умолчанию. Будь добра сама добавить в конфиг примерно такое:

(projectile-mode +1)
(define-key projectile-mode-map (kbd "s-p") 'projectile-command-map) ; это с кнопочкой Win, она же Super
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map) ; Ctrl+c p

Кэширование

Так как индексирование больших проектов не совсем быстро, Projectile умеет кэшировать файлы проекта. Чтобы разрешить кэширование:

(setq projectile-enable-caching t)

Кэш сохраняется в папке emacs. У меня есть, мне удобно. Даже при том, что проекты у меня невелики. Во всяком случае, кэширование редко мешает, а если что, запуск C-u C-c p f очистит кэш перед тем, как спросить, к какому файлу мы хотим перейти. Можно удалить из кэша конкретный файл (M-x projectile-purge-file-from-cache) или каталог (M-x projectile-purge-dir-from-cache). Но мне не было нужно. А C-c p z, наоборот, добавляет текущий файл в кэш проекта, что тоже как-то не было нужно. Обычно новый файл в папке проекта добавляется в кэш, как только открываешь этот файл.

Игнорировать файлы и подкаталоги

Если мы хотим велеть Projectile игнорировать определённые файлы при индексировании проекта, можно указать в файле .projectile пути к ним относительно корня проекта, начинающиеся со /. То, что надо игнорировать, указываем со знаком - в начале строки. Или просто ничего не ставим. Но это если индексирует своими силами. Если там метод «чужой», то ограничения надо задавать тому внешнему методу.

Пример:

-/log
-/tmp
-/vendor
-/public/uploads

Это заставит игнорировать папки в корне проекта. Можно и иначе:

-tmp
-*.rb
-*.yml
-models

Можно, наоборот, игнорировать всё, кроме определённых нужных каталогов, если так проще. Если мы выбрали, какие каталоги смотреть, это значит, что всё остальное игнорируется.

Пример:

+/src/foo
+/tests/foo

К сожалению, маски файлов так выбирать нельзя. Только подкаталоги.

Если указаны и подкаталоги, которые игнорировать, и те, которые смотреть, то сначала применяются правила, что смотреть, потом выбранное проверяется на предмет, не надо ли там ещё что-то игнорировать.

Кнопочки

Удобно смотреть список по C-c p C-h. Можно заменить префикс C-c p на что-то другое примерно так: (setq projectile-keymap-prefix (kbd "C-c C-p")). Или добавить альтернативный префикс: (define-key projectile-mode-map (kbd "s-p") 'projectile-command-map).

Можно позвать projectile-commander, а там нажать ?, чтоб посмотреть варианты.

То, что забываю, а актуально: переключение проектов - projectile-switch-project - C-c p p.

То, что дико понравилось: искать файлы через helm-projectile (C-c p h) - иначе я в своём наилюбимейшем проекте нафиг теряюсь. Естественно, требует установленного helm-projectile, который нашёлся в melpa. дополнение и предложение в emacs - тут у меня про helm что-то. (UPD 2022-08-21: давно не пользуюсь. C-c p f - (найти файл) вместо этого вполне достаточен, vertico прекрасно показывает варианты).

  • C-c p s s - поиск по проекту с ag
  • С-с p s g - grep
  • C-c p s r - ripgrep
  • С-с p r - replace in project

Разумеется, можно добавлять свои команды.

Настройки проекта

Mode line

В modeline по умолчанию Projectile выглядит как Projectile[ProjectName:Project Type]. Но! Это настраивается.

  • projectile-mode-line-prefix (by default " Projectile") controls the static part of the mode-line
  • projectile-dynamic-mode-line (by default t) controls whether to display the project name & type part of the mode-line
  • projectile-mode-line-function (by default projectile-default-mode-line) controls the actual function to be invoked to generate the mode-line. If you'd like to show different info you should supply a custom function to replace the default, for example (setq projectile-mode-line-function '(lambda () (format " Proj[%s]" (projectile-project-name))))

И это хорошо, потому что поумолчательный вариант уж очень длинный. А как укоротить project-name было чуть выше.

Название проекта по умолчанию не возникает, если это удалённые файлы, редактируемые через TRAMP. Пишут, слишком медленная операция получается.

Проблемы (неактуально)

TRAMP c /sudo:: не дружил с projectile-global-mode. Если возникала проблема, надо было выключить projectile, открыть нужное, потом можно снова включить projectile, и до перезапуска emacs проблемы не будет.

https://github.com/bbatsov/projectile/issues/835

Ссылки


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍