vi ('vee eye'로 발음) 편집기는 유닉스 시스템에서 처음으로 전체 화면 모드로 동작하는 파일 편집기 중 하나로 개발되었으며 명칭은 제목과 같이 VIsual editor에서 유래했다. vim은 역시 제목 그대로 '기능이 향상된' vi 편집기며, gvim은 그래픽 사용자 환경에서 동작하는 또 하나의 '향상된' 편집기다. 대부분 시스템 관리자는 기본으로 설치된 vi를 vim으로 바꿔 버리고, vi라고 명령해도 vim이 실행되도록 설정해 둔다. 따라서 이제부터 vi라 함은 최신 버전의 vim 소프트웨어를 말하는 것이다. [22]
vi를 시작하려면 터미널에서 아래와 같이 명령하기만 하면 된다.
$ vi # 새 파일을 편집 $ vi something.txt # 이미 있는 파일을 열며 시작 $ vi new.txt # new.txt라는 새 파일을 편집
X-Window, 즉 그래픽 환경에서 실행하려면 터미널에서 gvim을 실행시키거나 또는 자신이 쓰는 환경의 메뉴에서 고를 수 있다. gvim은 GNOME 환경의 응용 프로그램 메뉴에 등록되어 있다. 다음의 두 그림은 vi의 실행 모습을 보여준다 - 터미널의 가장 아래 한 줄이 특별한 목적(메시지 출력 또는 명령 프롬프트)으로 이용되고 있음에 주목하자.
그림 4.1. vim으로 이 문서의 소스를 편집
그림 4.2. gvim으로 같은 파일을 편집
이렇게 vi를 시작했다면, 뭔가 입력해 보려고 키를 눌러볼 것이고, 원하는 키가 제대로 입력이 되지 않을 것이므로 좀 당황스러울 것이다. 예를들어 처음 어떤 파일을 연 그 상태에서, h l(좌우) 키나 k j(상하) 키를 누르면 입력은 되지 않고 커서가 움직인다. vi 편집기가 여느 편집기와 비슷한 것이라면 이렇게 하루 날을 잡아 따로 익혀볼 이유가 없다!
운 좋게도 a i o 등의 문자를 눌렀다면 그 이후는 자연스럽게 입력이 된다. 바로 "입력을 할 수 있는 상태"에 있는 것이다. 이렇게 입력을 하다가 다시 처음 실행했을 때의 상태, 즉 "뭔가 좀 이상한 상태"로 가려면 Esc 키를 누른다. 다시 입력하려면 a i o 중 하나, 또 이상한 상태로 오려면 Esc, ... 쉽다 :-)
쉽고 재밌긴 한데, 입력한 내용을 저장은 어떻게 하며 또 지금으로서 가장 중요한(?) 종료는 어떻게 할까? Esc 키를 눌러서 일단 "뭔가 좀 이상한 상태"로 가자. 그리고 키보드에서 : 문자, 즉 Shift-; 문자를 눌러 본다. 편집 창의 왼쪽 아래로 커서가 이동하고 방금 입력한 : 문자가 마치 프롬프트처럼, 어떤 입력을 기다리는 듯 보일 것이다. 이 프롬프트에서 저장과 종료를 위한 명령을 할 수 있다.
write 명령은 지정된 name의 파일로 현재의 텍스트를 저장하거나, name이 명시되지 않았다면 현재 파일을 그대로 저장한다. 물론 쉘 프롬프트에서 단순히 vi로 시작했다면 파일 이름이 주어지지 않았다는 메시지를 보여줄 것이다. vi 어떤파일 형식으로 시작했다면 이렇게 :w라고만 해도 된다.
종료하기 위해 quit 명령을 한다. 현재 열린 파일이 변경되었다면 먼저 저장하거나 또는 :q! 명령으로 강제 종료할 것을 알려 준다.
논리적으로 맞다면 이렇게 여러 가지 명령을 이어서 할 수도 있다. :wq는 :w를 먼저 하고 나서 :q를 하는 것과 완전히 같은 명령이다. 만약 :qw라고 했다면 변경된 파일을 바로 닫을 수 없다는 메시지를 보여준다.
![]() |
vi가 실행 중인 창을 그냥 닫지 말자! |
---|---|
터미널 창과 마찬가지로, vi는 반드시 정상적으로 종료되어야 한다. 일부 vi 버전은 갑자기 창이 닫혀 비정상 종료되었을 경우 시스템 자원을 갉아 먹는 좀비[23] 프로세스를 만든다. GNU/Linux라는 새로운 환경에 스스로 적응하려고 노력하길! |
vi 명령으로 어떤 텍스트 파일을 열고 (간단히 수정하고) 닫을 수 있게 되었다. 이 편집 소프트웨어는 썰렁한 겉모습에 어울리지 않게 정말 막강한, 그리고 많은 내부 명령들을 포함하고 있으며 그만큼 많은 참고 문서들도 여기 저기서 찾을 수 있다. 이런 명령들을 알기 전에 먼저 이해해야 할 것은 vi의 사용자 환경을 구성하는 세 가지 요소인 입력 모드, 명령 모드, 그리고 명령 프롬프트다.
![]() |
vi의 모드(modes)와 프롬프트 |
---|---|
|
어느 정도 감이 와닿았겠지만 vi는 조촐한(?) 사용자 환경의 한계를 명령 모드와 명령 프롬프트라는 도구로 극복하는, "상당히 다른" 방식의 파일 편집 소프트웨어다. 양자택일의 기로에서 이 vi를 선택했다면 이것의 독특한 방식 자체에 익숙해져야 한다. [24] 한 눈 팔지 말고 착실히 익혀 두면 앞으로 어떤 일을 하더라도 최고의 속도와 효율성을 보장받을 것이다.
![]() |
커서가 지나간 곳의 한글이 깨짐!? |
---|---|
일부 무성의한 터미널 프로그램(예를들어 MS-Windows에 내장되어 있는 telnet)에서 vi를 이용하다 보면 커서가 지나간 곳의 한글이 깨져 보일 때가 있다. 그럴 때는 명령 모드에서 Ctrl-l, 즉 터미널 다시 그리기를 해보자. 이 명령은 이미 소개한 것처럼 Bash에서 제공하는 clear의 단축키와 같다. |
[22] /bin/vi 파일이 /usr/bin/vim 파일로 링크 또는 대체되어 있는지 확인해 보자.
[23] 좀비(zombies) 프로세스는 로그아웃 이후에도 그 사용자의 이름으로 시스템을 헤매고 다니는 성가신 프로세스다. 관리자는 물론 kill 한 방으로 그런 좀비를 처단할 수 있지만 다른 이용자들의 경우 (자신의 프로세스가 아니므로) 죽이지도 어쩌지도 못하는 매우 오노스런 상황이 된다.
[24] 물론 숙적인 emacs도 나름대로 "매우 다른" 방식으로 동작한다. 사실 알려진 우주에 존재하는 모든 파일 편집기는 vi와 emacs, 그리고 그 외 - 이렇게 세 가지로 분류된다!