vi
vi(브이아이, /ˈviːˈaɪ/)는 유닉스 환경에서 가장 널리 사용되는 문서 편집기 중 하나로, 1976년 빌 조이(Bill Joy)가 초기 BSD 릴리즈에 포함할 목적으로 개발하였다. 이름은 "비주얼 에디터(visual editor)"의 줄임말에서 유래했으며, 한 줄씩 편집하는 줄 단위 편집기(라인 에디터)가 아니라 한 화면을 보면서 편집하는 전체 화면 편집기라는 의미를 담고 있다.
역사
vi의 기원은 1969년 켄 톰프슨(Ken Thompson)이 유닉스 개발 당시 만든 ed라는 라인 에디터에서 시작된다. 당시에는 CRT 모니터가 아닌 텔레타이프(종이에 출력하는 프린터)를 사용했기 때문에, 텍스트를 한 줄 단위로 명령을 내려 편집하는 방식이 표준이었다.
1970년대 CRT 모니터가 달린 터미널이 보급되었음에도 유닉스는 여전히 ed를 사용하고 있었다. 버클리 대학의 빌 조이는 조지 쿨루리스(George Coulouris) 교수가 만든 em 편집기의 비디오 터미널 지원 코드를 참고하여, ed에 전체 화면 비주얼 편집 모드를 추가한 ex 에디터를 개발했다. 1977년 10월, 이 비주얼 모드가 완성되었고, 이후 BSD 유닉스 사용자들이 비주얼 모드를 선호하게 되면서 vi라는 이름으로 독립하여 실행되게 되었다.
빌 조이는 후에 썬 마이크로시스템즈(Sun Microsystems)의 공동 창업자가 되었다.
조작 방식
vi는 명령 모드(command mode)와 입력 모드(insert mode)라는 두 가지 주요 모드로 동작하는 모달 편집기(modal editor)이다. 프로그램을 시작하면 기본적으로 명령 모드로 진입하며, 이 상태에서 i 키를 누르면 입력 모드로 전환되어 텍스트를 입력할 수 있다. Esc 키를 눌러 다시 명령 모드로 돌아온다.
명령 모드에서는 다음과 같은 기본 조작이 가능하다:
- 커서 이동:
h(왼쪽),j(아래),k(위),l(오른쪽) - 삭제:
x(한 글자 삭제),dd(한 줄 삭제) - 복사/붙여넣기:
yy(한 줄 복사, yank),p(붙여넣기, put) - 종료:
ZZ(저장 후 종료),:q(종료),:wq(저장 후 종료)
: 키를 누르면 ex 명령어 모드로 진입하여 파일 저장, 종료, 검색 및 치환 등의 작업을 수행할 수 있다.
이러한 키 배치는 vi가 개발되던 당시 사용된 Lear-Siegler ADM3A 터미널의 키보드 레이아웃에 기반한다. 이 터미널에는 별도의 화살표 키가 없었고, Esc 키는 현재 키보드의 Tab 위치에 있었다.
파생 및 클론
현대에는 오리지널 vi를 직접 사용하는 경우는 드물고, 기능을 모방한 클론이 주로 사용된다:
- Vim (Vi IMproved): 1991년 브람 무레나르(Bram Moolenaar)가 개발. 현재 가장 널리 사용되는 vi 클론으로, 구문 강조, 마우스 지원, 그래픽 버전, 시각 모드, 플러그인 시스템 등 다양한 기능을 제공한다. 대부분의 리눅스 배포판에서
vi명령어를 입력하면 Vim이 호환 모드로 실행된다. - Neovim: Vim의 리팩터 버전으로, 현대적인 확장성과 비동기 처리를 강화했다.
- nvi: BSD 라이선스로 제공되며 원본 vi와의 동작 호환성으로 정평이 나 있다.
- elvis: 독자적인 팬층을 확보한 vi 클론.
- ex-vi (The Traditional Vi): 빌 조이의 원본 소스 코드를 현대 시스템에서 컴파일 가능하도록 유지하는 프로젝트.
영향
vi의 모달 편집 방식과 키 조합은 유닉스 문화의 상징이 되었으며, 오늘날 다양한 프로그램(웹 브라우저 플러그인, IDE 플러그인, 파일 매니저 등)에서 vi 키맵을 지원한다. 또한 Helix, Kakoune 같은 현대적인 편집기들도 vi의 "키보드만으로 빠르게 작업한다"는 철학을 계승하고 있다.