projectile - 프로젝트 단위로 파일 이름 찾고 문자열 검색하고 바꾸고…
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
projectile 느려지는 현상 고쳐짐C-x C-s C-x C-c