yi는 하스켈로 쓰여진 텍스트 편집기다.

vim과 emacs의 단축키를 기본적으로 지원한다.

설정 파일은 하스켈 코드로 작성하며, 기능 확장 역시 하스켈로 자유롭게 할 수 있다.


홈페이지: https://yi-editor.github.io/



1. 설치

하스켈을 한다면 stack이 깔려있을 것이다. 터미널에 다음과 같이 친다.


> stack install yi



2. 실행

콘솔에 다음과 같이 입력한다.


> yi fileName --as=vim


이맥스 사용자는 다음과 같이 입력한다.


> yi fileName --as=emacs



3. 설정

사용자 설정 파일은 ~/.config/yi/yi.hs 이다. 없으면 만들자.

빔 사용자는 매번  --as=vim을 입력하기 귀찮을 것이다. 다음과 같이 코드를 짠다.


-- ~/.config/yi/yi.hs 파일에 다음과 같이 작성한다.

import Yi

main = yi $ defaultVimConfig


이렇게 치고 저장한 뒤에 yi를 실행하면 recompiling 메시지가 뜰 것이다.

yi는 설정 파일을 정적으로 로딩하기 때문에 변경할 때마다 재컴파일이 필요하다.



4. 내부 구조

yi는 크게 네 파트로 구성된다. Action, Keymap, UI, Glue code.

Action = 편집기 상에서 행해지는 모든 액션들이다. 파일입출력, 커서이동 등.

    BufferM, EditorM, YiM 이렇게 세 개의 모나드로 구성된다.

Keymap = 실제 키보드 입력과 액션을 바인딩해주는 것이다.

    키맵 모듈을 갈아끼우면 손쉽게 니가 전에 쓰던 설정을 쓸 수 있다.

    vim과 emacs용 단축키 설정도 이 키맵을 변경하는 식으로 동작한다.

UI = TUI든 GUI든 실제 상태 변경을 반영한 화면 렌더링, 입출력 스트림 처리 등.

Glue code = 키맵과 UI를 이어주는 기능.


각각의 파트는 독립적이므로, 어느 하나만 갈아 끼우더라도 잘 작동한다.

따라서 유연한 확장성과 개인화가 가능하다.