projectile - 프로젝트 단위로 파일 이름 찾고 문자열 검색하고 바꾸고…

1 minute read

projectile은 project 단위로 뭔가 할 수 있게 해준다. project는 작업 단위. 파일을 찾을 때, 내용을 검색할 때, 항상 / 디렉터리를 타깃으로 하지 않는다. 대상 디렉터리가 존재하기 마련. 이 블로그는 로컬에서 글을 쓸 때, ~/project/emacsian 디렉터리를 사용한다.

project 루트는 어떻게 찾나? git 같은 버전 컨트롤 저장소면 project로 인식한다. 영리하다. project를 작업 단위로 생각해도 되지만 버전 컨트롤 단위로 생각해도 된다. 훌륭한 결정이다. 빈 .projectile 파일을 만들어 project 루트를 정의할 수도 있다.

<Exploring large projects with Projectile and Helm Projectile> 글을 보는 걸 추천. 뽐뿌를 엄청 받는다.

(use-package projectile
  :ensure t
  :config
  (projectile-mode)
  (setq projectile-enable-caching t)
  (setq projectile-indexing-method 'alien))
(use-package helm-projectile
  :ensure t
  :config
  (helm-projectile-on))

helm을 사용하고 있어서 helm 통합 패키지도 같이 사용하고 있다. 최근에 미친 듯이 느려지는 현상이 발생해서 이슈 댓글에 나온 우회 방법을 적용했다.

C-c p ?

키 바인딩은 C-c p prefix를 사용한다. 바인딩한 키를 모두 볼 수 있다.

| C-c p f | projectile-find-file        |
| C-c p b | projectile-switch-to-buffer |
| C-c p p | projectile-switch-project   |
| C-c p k | projectile-kill-buffers     |

주로 사용하는 기본 키. 요즘 작업은 C-c p p 키로 시작한다.

| C-c p s g | projectile-grep |
| C-c p s s | projectile-ag   |

찾기도 루트 디렉터리를 입력할 필요 없으니 편해진다. Windows에서는 ripgrep을 쓰고 있어서 사용 못 하고 있다. –ignore를 하드코딩으로 넘기고 있어서. MacOS에서는 문제없이 잘 쓰고 있다.

| C-c p r | projectile-replace |

major-mode에 리네임 기능이 없을 때, 이것만 한 게 없다.

| C-c p 4 f | projectile-find-file-other-window |
| C-c p 5 f | projectile-find-file-other-frame  |

4, 5 키에 의미를 넣어서 통일성 있게 사용하고 있다. 4는 윈도. 5는 프레임.

| C-c p e | projectile-recentf |

helm에서 최근 파일을 볼 수 있다. 그래서 쓸 일이 없어 보이지만 거기는 모든 파일이 나온다. 프로젝트별 최근 파일을 볼 수 있는 기능이 아쉬울 때가 있다.

| C-c p ! | projectile-run-shell-command-in-root       |
| C-c p & | projectile-run-async-shell-command-in-root |

emacs key binding 컨벤션을 잘 따르고 있다. !, & 키는 shell 관련 키바인딩으로 쓴다.

홈페이지 - bbatsov/projectile - github.com

Update <2017-11-11 Sat> projectile 느려지는 현상 고쳐짐

C-x C-s C-x C-c