Projectile 是 Emacs 常用的專案管理工具,它可以從 Git 的設定中,知道哪些檔案屬於這個專案需要編輯的,哪些是三方函式庫,不需要放入查詢中,它可以跟 Grep/AG 結合來搜尋專案中的特定函數或變數,可以取代這些函數或變數的名稱,可以很快的轉換到另一個專案... 等等
(use-package projectile
:ensure t
:bind-keymap ("\C-c p" . projectile-command-map)
:config
(projectile-mode t)
(setq projectile-completion-system 'ivy)
(use-package counsel-projectile
:ensure t)
)
(use-package ag
:ensure t)
安裝時設定 Ctrl-c p 為啟動 projectile 熱鍵,預設是 Ctrl-c Ctrl-p 是依據 Emacs 的熱鍵設定規範,但我用習慣 Ctrl-c p 來啟動,這個可以看個人喜好設定,我們設定跟 projectile 配合的介面為 ivy,如果你使用 ido 或者 helm 它也可以支援,看個人喜好,順便安裝 counsel-projectile
我建議同時也安裝 the_silver_searcher 這個工具在系統端,在 Emacs 安裝 ag 這個套件來做快速搜尋,等一下使用說明會提到
可以用 Ctrl-c p ? 來看所有有關指令 
使用 Ctrl-c p p 來切換專案,還沒加入清單的專案只要開過裡面的檔案一次,就會紀錄下來 
使用 Ctrl-c p f 來切換開啟專案中的檔案,會排除 .gitignore 下的部分,例如
它就不會開啟 node_modules 下的檔案
可以使用 Grep Ctrl-c p s g或者 ag Ctrl-c p s s,差別在於用 Grep 不會排除 .gitignore 的部分,例如搜尋 body 
而使用 ag 會排除,例如 
在 *grep* *ag search* 緩衝區,使用 n 或是 p 來移動符合的搜尋結果,按 enter 來切換上面緩衝區的相關內容及位置
要使用 grep 或 ag 的情境,端看是否需要包含 .gitignore 的部分
ag 在 Emacs 下也可以單獨使用,不一定要在 projectile 下,使用 Meta-x ag
輸入要搜尋字串 
接著輸入要搜尋的目錄 
不一定在 projectile 的專案下,也是可以使用
但在 projectile 下,可以限制搜尋的目標
有些程式語言,像是 C/C++ 有表頭檔 (header) 跟實作檔,使用 Ctrl-c p a (alternative) 可以馬上互相切換,如 
使用 Ctrl-c p T 來切換實作檔跟測試檔
使用 Ctrl-c p r 來尋找取代變數或函式
建立 build 目錄,使用 Ctrl-c p c ,第一次編譯 cd build && cmake ..,第二次編譯 cmake --build build 
