1 minute read

Emacs evil-mode를 사용하면 vim에서 사용하는 f/F, t/T 키를 사용할 수 있다. 예를 들어 fa 키를 누르면 현재 라인에 있는 a 문자를 찾는다. Evil-snipe 패키지를 사용하면 현재 라인뿐만 아니라 전체 문서로 검색 범위를 넓힐 수도 있고 연속된 두 글자를 검색할 수도 있다. 이걸 한글로도 넓혀보고 싶었다. evil-snipe-aliases 변수가 있어서 손쉽게 한글도 지원할 수 있었다.

두벌식 초성만 지원

두벌식 초성만 지원한다. 모음과 종성은 뺐다. 구현상의 이유다. 정규식을 사용해서 검색할 건데, 초성처럼 범위로 나타낼 수 없기 때문이다. 좀 더 생각해 보니 이렇게 정밀도를 높이면 오히려 검색에 방해가 되겠다 싶다. 구현하기 어려워서 빨리 포기해서 다행이다.

fr 키를 누르면 r 도 찾고 , 가-낗 까지 찾게 한다. 한글로 찾기 영문으로 찾기 이런 모드는 따로 안 나누고 같이 찾게 했다.

evil-snipe-aliases 변수 설정

evil-snipe 패키지에 key를 정규식으로 매핑할 수 있는 변수가 있다. 기대를 안 하고 Advice를 생각으로 소스 코드를 보다가 발견했다.

(add-hook 'c++-mode-hook
          (lambda ()
            (make-local-variable 'evil-snipe-aliases)
            (push '(?\[ \"[[{(]\") evil-snipe-aliases)))"

주석을 보니 C++ 모드에서 f[ 키를 누르면 [ 문자뿐만 아니라 (, { 문자도 찾도록 정의할 수 있다. 이렇게 써도 편하겠다. 이 변수를 쓰면 한글 검색을 할 수 있다.

(setq evil-snipe-aliases '(
                           (?r "[rㄱ가-낗]")
                           (?R "[Rㄲ까-낗]")
                           (?s "[sㄴ나-닣]")
                           (?e "[eㄷ다-딯]")
                           (?E "[Eㄸ따-띻]")
                           (?f "[fㄹ라-맇]")
                           (?a "[aㅁ마-밓]")
                           (?q "[qㅂ바-빟]")
                           (?Q "[Qㅃ빠-삫]")
                           (?t "[tㅅ사-싷]")
                           (?T "[Tㅆ싸-앃]")
                           (?d "[dㅇ아-잏]")
                           (?w "[wㅈ자-짛]")
                           (?W "[Wㅉ짜-찧]")
                           (?c "[cㅊ차-칳]")
                           (?z "[zㅋ카-킿]")
                           (?x "[xㅌ타-팋]")
                           (?v "[vㅍ파-핗]")
                           (?g "[gㅎ하-힣]")
                           ))

하나만 치니깐 나머지는 GitHub Copilot이 채워줬다. 친절하다

테스트

The 비행기는 quick 이륙 brown 준비를 fox 마쳤지만 jumped 갑자기 over 폭우가 the 쏟아졌다 lazy dog.
^

fT 키를 누르면 [Tㅆ싸-앃] 를 찾는다. 으로 이동한다.

The 비행기는 quick 이륙 brown 준비를 fox 마쳤지만 jumped 갑자기 over 폭우가 the 쏟아졌다 lazy dog.
                                                                              ^

Fc 키를 누르면 [cㅊ차-칳] 를 찾는다. 으로 이동한다.

The 비행기는 quick 이륙 brown 준비를 fox 마쳤지만 jumped 갑자기 over 폭우가 the 쏟아졌다 lazy dog.
                                          ^

; 키를 눌러 반복 찾기를 누르면 [cㅊ차-칳] 를 한 번 더 찾는다. c 로 이동한다.

The 비행기는 quick 이륙 brown 준비를 fox 마쳤지만 jumped 갑자기 over 폭우가 the 쏟아졌다 lazy dog.
               ^

잘 된다.

마치며

정말 Emacs에서 evil-mode를 쓴다면 evil-snipe 패키지를 안 쓸 이유가 없다.

한글 검색을 계속 미루다가 이제야 했다. f/t 모션 활용도가 훨씬 더 높아졌고 이동이 가벼워졌다.

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