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 플러그인과 연동하여, 자동 완성 지원하기
  • 바꾸기 기능
    • 텍스트에 대해 사용하는 패턴이 감지되면 해당하는 유니코드 문자들로 치환하기
    • 줄 단위, 버퍼 전체 범위 등의 옵션 지원
  • 추가 명령어
    • 인라인 모드의 활성/비활성/토글
    • 바꾸기 기능의 트리거 명령어
  • 유저 컨피그
    • 기본 옵션
    • 유저 등록 키워드와 문자 매핑

위의 내용을 가지고, Copilot을 시켜서 개요만 잡을 생각이었습니다.

실행

사실 저렇게 계획을 세운 뒤 agent.md에 넣고서 코파일럿을 통해 아웃라인 정도만 간단히 뽑아볼 생각이었는데, 생각보다 잘 만들어줘서 거의 그대로 빠르게 공개하게 된 상황입니다.

명세를 적당히 마크다운으로 찍었을 뿐이지만, 충실히 깔끔하게 다 구현해 주더군요.
진짜 요새 llm 잘 나오긴 하네요.

문서화나 샘플 설정 뽑기, 아스키 아트 까지 간단히 해주기에 인지적 자원을 많이 소모하진 않았습니다.

        ╔═════════════════════════════════════════╗
        ║  ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄  ║
        ║  █ α │ β │ γ │ δ │ θ │ λ │ σ │ ω │ π █  ║
        ║  █───┼───┼───┼───┼───┼───┼───┼───┼───█  ║
        ║  █ ∈ │ ∉ │ ⊂ │ ⊃ │ ∪ │ ∩ │ ∅ │ ℕ │ ℝ █  ║
        ║  █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█  ║
        ║  █         A   Z   T   E   X         █  ║
        ║  █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█  ║
        ║  █ → │ ← │ ⇒ │ ⇐ │ ↦ │ ↑ │ ↓ │ ∞ │ ∀ █  ║
        ║  █───┼───┼───┼───┼───┼───┼───┼───┼───█  ║
        ║  █ ≤ │ ≥ │ ≠ │ ≈ │ ± │ × │ ÷ │ · │ ∃ █  ║
        ║  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ║
        ╚═════════════════════════════════════════╝

README.md에 쓰인 아스키 아트. Monospace 글꼴의 경우엔 제대로 보입니다.

동작

의도한 대로의 동작은 모두 잘 실행됩니다.

특히 제일 걱정했던 부분인 nvim-cmp 연동 부분이 잘 작동하네요.

aztex-cmp

의도대로 자동완성 및 버추얼 텍스트가 잘 작동해서 서포팅이 잘 되는 느낌입니다.
라인/버퍼 전체 치환도 제대로 작동하고요.

다만 좀 더 향상시킬 여지는 있을거 같기도 합니다.