aztex.nvim 플러그인
어딘가에서 얻은 아이디어
어쩌다보니, Vim 사용 시에 LaTeX 포맷처럼 noremap에 유니코드 문자를 바인딩하고 사용하신다는 분의 이야기를 듣게 되었습니다.
TeX를 쓸 수 있는 환경이 갖춰져 있다면 좋긴 하겠지만, 그렇지 않은 경우나 더 간단한 사용을 위해서 그런 설정이 있다고 하셨는데, 이를 플러그인의 형태로 만들어보면 어떨까 생각하게 되었습니다.
그래서 그 분의 핸들에서 어느 정도 따온 뒤 TeX와 합친 이름인 aztex.nvim 플러그인을 만들게 되었습니다.
https://github.com/seokgukim/aztex.nvim
목표
aztex.nvim을 만들면서 목표로 한 내용은 다음과 같습니다.
기본 기능
\(backslash) 를 기준으로 등록된 LaTeX 키에 맞는 경우 해당하는 유니코드 문자로 변환
상세
- 인라인 모드
- Neovim의 Insert 모드에서
<Tab>,<Space>의 입력 시에 등록된 유니코드 문자들에 대응하는 LaTeX패턴이 앞에 존재하는지 확인하고 치환하기 (e.g.\alpha⇒α) nvim-cmp플러그인과 연동하여, 자동 완성 지원하기
- Neovim의 Insert 모드에서
- 바꾸기 기능
- 텍스트에 대해 사용하는 패턴이 감지되면 해당하는 유니코드 문자들로 치환하기
- 줄 단위, 버퍼 전체 범위 등의 옵션 지원
- 추가 명령어
- 인라인 모드의 활성/비활성/토글
- 바꾸기 기능의 트리거 명령어
- 유저 컨피그
- 기본 옵션
- 유저 등록 키워드와 문자 매핑
위의 내용을 가지고, Copilot을 시켜서 개요만 잡을 생각이었습니다.
실행
사실 저렇게 계획을 세운 뒤 agent.md에 넣고서 코파일럿을 통해 아웃라인 정도만 간단히 뽑아볼 생각이었는데, 생각보다 잘 만들어줘서 거의 그대로 빠르게 공개하게 된 상황입니다.
명세를 적당히 마크다운으로 찍었을 뿐이지만, 충실히 깔끔하게 다 구현해 주더군요.
진짜 요새 llm 잘 나오긴 하네요.
문서화나 샘플 설정 뽑기, 아스키 아트 까지 간단히 해주기에 인지적 자원을 많이 소모하진 않았습니다.
╔═════════════════════════════════════════╗
║ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ║
║ █ α │ β │ γ │ δ │ θ │ λ │ σ │ ω │ π █ ║
║ █───┼───┼───┼───┼───┼───┼───┼───┼───█ ║
║ █ ∈ │ ∉ │ ⊂ │ ⊃ │ ∪ │ ∩ │ ∅ │ ℕ │ ℝ █ ║
║ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ║
║ █ A Z T E X █ ║
║ █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ ║
║ █ → │ ← │ ⇒ │ ⇐ │ ↦ │ ↑ │ ↓ │ ∞ │ ∀ █ ║
║ █───┼───┼───┼───┼───┼───┼───┼───┼───█ ║
║ █ ≤ │ ≥ │ ≠ │ ≈ │ ± │ × │ ÷ │ · │ ∃ █ ║
║ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ║
╚═════════════════════════════════════════╝
README.md에 쓰인 아스키 아트. Monospace 글꼴의 경우엔 제대로 보입니다.
동작
의도한 대로의 동작은 모두 잘 실행됩니다.
특히 제일 걱정했던 부분인 nvim-cmp 연동 부분이 잘 작동하네요.

의도대로 자동완성 및 버추얼 텍스트가 잘 작동해서 서포팅이 잘 되는 느낌입니다.
라인/버퍼 전체 치환도 제대로 작동하고요.
다만 좀 더 향상시킬 여지는 있을거 같기도 합니다.