f/t 모션으로 한글도 검색하는 evil-snipe 설정
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