이맥스 자동완성시키기

이맥스의 기본 기능들은 잘 동작하지만 어떤 기능들이 있는지 쉽게 찾기 힘듭니다. alt-x로 함수를 실행할 때에도 원하는 함수를 정확히 할고있는 게 아니라면 필요한 함수를 찾기 힘듭니다. ivy나 help 플러그인은 원하는 기능을 쉽게 찾을 수 있게 도와줍니다.

Ivy, Counsel, Swiper

Ivy는 컨텍스트와 상관없이 이맥스에서 자동완성을 도와주는 도구입니다. Ivy는 Ivy를 사용해 이맥스의 기본 기능을 개선시킨 함수들을 제공하는데 이를 Counsel이라고 부릅니다. Swiper는 이맥스의 검색 기능(Ctrl-s)를 개선시킨 함수입니다. 이 세 종류의 기능을 보통 함께 사용합니다.

설치하기

use-package를 사용해서 쉽게 설치할 수 있습니다. :config 다음의 내용들은 ivy GitHuub README.md의 예시 설정에서 가져왔습니다.

(use-package counsel
  :ensure t)

(use-package ivy
  :ensure t
  :config
  (setq ivy-use-virtual-buffers t)
  (setq enable-recursive-minibuffers t)
  ;; enable this if you want `swiper' to use it
  ;; (setq search-default-mode #'char-fold-to-regexp)
  (global-set-key "\C-s" 'swiper)
  (global-set-key (kbd "C-c C-r") 'ivy-resume)
  (global-set-key (kbd "<f6>") 'ivy-resume)
  (global-set-key (kbd "M-x") 'counsel-M-x)
  (global-set-key (kbd "C-x C-f") 'counsel-find-file)
  (global-set-key (kbd "<f1> f") 'counsel-describe-function)
  (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
  (global-set-key (kbd "<f1> o") 'counsel-describe-symbol)
  (global-set-key (kbd "<f1> l") 'counsel-find-library)
  (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
  (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
  (global-set-key (kbd "C-c g") 'counsel-git)
  (global-set-key (kbd "C-c j") 'counsel-git-grep)
  (global-set-key (kbd "C-c k") 'counsel-ag)
  (global-set-key (kbd "C-x l") 'counsel-locate)
  (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
  (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history))

설치한 이후 alt-x 를 누르면 예상되는 함수들이 여럿 나오고, 함수 이름 중 일부만 작성해도 원하는 함수를 쉽게 찾을 수 있습니다. 이외에도 도움말이나 검색(ctrl-x)도 좀 더 쓰기 편하게 쓸 수 있습니다.

잡다한 ivy 팁들

alt-x 함수 이름 중간부터 검색하기

alt-x를 누르면 ^키가 미리 눌러져 있습니다. ^는 정규표현식에서 사용하는 기호로 단어의 시작을 의미합니다. 따라서 ^ 이후에 글자를 입력하면 항상 함수 이름의 시작 글자부터 검색하게 됩니다. ^theme를 검색하면 theme로 시작하는 함수들을 검색합니다. theme를 검색하면 theme가 들어간 모든 함수를 검색합니다.

띄어쓰기를 사용해서 여러 단어 검색

theme를 검색하면 "theme"가 정확히 들어간 함수만 검색합니다. the me를 검색하면 함수 이름에 "the"와 "me"가 포함된 함수를 검색합니다.