vi - VIsual editor, vim - Vi IMproved

vi ('vee eye'로 발음) 편집기는 유닉스 시스템에서 처음으로 전체 화면 모드로 동작하는 파일 편집기 중 하나로 개발되었으며 명칭은 제목과 같이 VIsual editor에서 유래했다. vim은 역시 제목 그대로 '기능이 향상된' vi 편집기며, gvim은 그래픽 사용자 환경에서 동작하는 또 하나의 '향상된' 편집기다. 대부분 시스템 관리자는 기본으로 설치된 vivim으로 바꿔 버리고, vi라고 명령해도 vim이 실행되도록 설정해 둔다. 따라서 이제부터 vi라 함은 최신 버전의 vim 소프트웨어를 말하는 것이다. [22]

시작과 종료

vi를 시작하려면 터미널에서 아래와 같이 명령하기만 하면 된다.

$ vi                          # 새 파일을 편집
$ vi something.txt              # 이미 있는 파일을 열며 시작
$ vi new.txt                    # new.txt라는 새 파일을 편집

X-Window, 즉 그래픽 환경에서 실행하려면 터미널에서 gvim을 실행시키거나 또는 자신이 쓰는 환경의 메뉴에서 고를 수 있다. gvim은 GNOME 환경의 응용 프로그램 메뉴에 등록되어 있다. 다음의 두 그림은 vi의 실행 모습을 보여준다 - 터미널의 가장 아래 한 줄이 특별한 목적(메시지 출력 또는 명령 프롬프트)으로 이용되고 있음에 주목하자.

그림 4.1. vim으로 이 문서의 소스를 편집

editors-vim.png

그림 4.2. gvim으로 같은 파일을 편집

editors-gvim.png

이렇게 vi를 시작했다면, 뭔가 입력해 보려고 키를 눌러볼 것이고, 원하는 키가 제대로 입력이 되지 않을 것이므로 좀 당황스러울 것이다. 예를들어 처음 어떤 파일을 연 그 상태에서, h l(좌우) 키나 k j(상하) 키를 누르면 입력은 되지 않고 커서가 움직인다. vi 편집기가 여느 편집기와 비슷한 것이라면 이렇게 하루 날을 잡아 따로 익혀볼 이유가 없다!

운 좋게도 a i o 등의 문자를 눌렀다면 그 이후는 자연스럽게 입력이 된다. 바로 "입력을 할 수 있는 상태"에 있는 것이다. 이렇게 입력을 하다가 다시 처음 실행했을 때의 상태, 즉 "뭔가 좀 이상한 상태"로 가려면 Esc 키를 누른다. 다시 입력하려면 a i o 중 하나, 또 이상한 상태로 오려면 Esc, ... 쉽다 :-)

쉽고 재밌긴 한데, 입력한 내용을 저장은 어떻게 하며 또 지금으로서 가장 중요한(?) 종료는 어떻게 할까? Esc 키를 눌러서 일단 "뭔가 좀 이상한 상태"로 가자. 그리고 키보드에서 : 문자, 즉 Shift-; 문자를 눌러 본다. 편집 창의 왼쪽 아래로 커서가 이동하고 방금 입력한 : 문자가 마치 프롬프트처럼, 어떤 입력을 기다리는 듯 보일 것이다. 이 프롬프트에서 저장과 종료를 위한 명령을 할 수 있다.

:w [name] - 저장 [새 파일 이름] (write)

write 명령은 지정된 name의 파일로 현재의 텍스트를 저장하거나, name이 명시되지 않았다면 현재 파일을 그대로 저장한다. 물론 쉘 프롬프트에서 단순히 vi로 시작했다면 파일 이름이 주어지지 않았다는 메시지를 보여줄 것이다. vi 어떤파일 형식으로 시작했다면 이렇게 :w라고만 해도 된다.

:q - 종료 (quit)

종료하기 위해 quit 명령을 한다. 현재 열린 파일이 변경되었다면 먼저 저장하거나 또는 :q! 명령으로 강제 종료할 것을 알려 준다.

:wq - 저장하고 종료 (write and quit)

논리적으로 맞다면 이렇게 여러 가지 명령을 이어서 할 수도 있다. :wq:w를 먼저 하고 나서 :q를 하는 것과 완전히 같은 명령이다. 만약 :qw라고 했다면 변경된 파일을 바로 닫을 수 없다는 메시지를 보여준다.

vi가 실행 중인 창을 그냥 닫지 말자!

터미널 창과 마찬가지로, vi는 반드시 정상적으로 종료되어야 한다. 일부 vi 버전은 갑자기 창이 닫혀 비정상 종료되었을 경우 시스템 자원을 갉아 먹는 좀비[23] 프로세스를 만든다. GNU/Linux라는 새로운 환경에 스스로 적응하려고 노력하길!

입력 모드와 명령 모드, 명령 프롬프트

vi 명령으로 어떤 텍스트 파일을 열고 (간단히 수정하고) 닫을 수 있게 되었다. 이 편집 소프트웨어는 썰렁한 겉모습에 어울리지 않게 정말 막강한, 그리고 많은 내부 명령들을 포함하고 있으며 그만큼 많은 참고 문서들도 여기 저기서 찾을 수 있다. 이런 명령들을 알기 전에 먼저 이해해야 할 것은 vi의 사용자 환경을 구성하는 세 가지 요소인 입력 모드, 명령 모드, 그리고 명령 프롬프트다.

vi의 모드(modes)와 프롬프트
입력 모드 - i I a A o O

텍스트를 입력할 수 있는 상태다. 명령 모드에서 이 상태로 전환하기 위해 주로 여섯 개의 "명령 문자"를 이용한다. i a o 셋은 차례대로 현재 커서 위치, 커서의 바로 다음 위치, 그리고 커서가 있는 줄의 다음 줄에서 입력을 시작할 수 있도록 해준다. 대문자(명령 모드에서 Shift 키를 누르고) I A O는 각각 커서가 있는 줄의 처음, 끝, 그리고 그 줄의 앞 줄에서 입력을 시작하게 한다.

명령 모드 - Esc

입력 모드, 또는 명령 프롬프트 상태 어느 곳에서나 Esc를 누르면 바로 이 상태가 된다. 명령 모드에서 입력 모드로 전환하기 위한 명령 문자를 치거나 또는 명령행 프롬프트로 전환하기 위한 문자를 치기 전까지는 기본적으로 명령 모드다.

명령 모드에서 할 수 있는 명령은 이동, 삭제, 찾기 등 매우 많으며 이들은 이 다음 페이지에서 설명될 것이다.

명령 프롬프트 - :

명령 모드에서 : 문자를 치면 커서가 창의 왼쪽 아래로 내려오며 이 프롬프트 상태가 된다. 이 상태에서는 vi의 전신인 ex 줄 단위 편집기(vi는 전체 화면 단위)의 기능을 이용할 수 있으며, 따라서 종종 ex 프롬프트로 불리기도 한다.

ex 프롬프트에서 할 수 있는 명령도 많으며 역시 다음 페이지에서 설명하겠다.

어느 정도 감이 와닿았겠지만 vi는 조촐한(?) 사용자 환경의 한계를 명령 모드와 명령 프롬프트라는 도구로 극복하는, "상당히 다른" 방식의 파일 편집 소프트웨어다. 양자택일의 기로에서 이 vi를 선택했다면 이것의 독특한 방식 자체에 익숙해져야 한다. [24] 한 눈 팔지 말고 착실히 익혀 두면 앞으로 어떤 일을 하더라도 최고의 속도와 효율성을 보장받을 것이다.

커서가 지나간 곳의 한글이 깨짐!?

일부 무성의한 터미널 프로그램(예를들어 MS-Windows에 내장되어 있는 telnet)에서 vi를 이용하다 보면 커서가 지나간 곳의 한글이 깨져 보일 때가 있다. 그럴 때는 명령 모드에서 Ctrl-l, 즉 터미널 다시 그리기를 해보자. 이 명령은 이미 소개한 것처럼 Bash에서 제공하는 clear의 단축키와 같다.



[22] /bin/vi 파일이 /usr/bin/vim 파일로 링크 또는 대체되어 있는지 확인해 보자.

[23] 좀비(zombies) 프로세스는 로그아웃 이후에도 그 사용자의 이름으로 시스템을 헤매고 다니는 성가신 프로세스다. 관리자는 물론 kill 한 방으로 그런 좀비를 처단할 수 있지만 다른 이용자들의 경우 (자신의 프로세스가 아니므로) 죽이지도 어쩌지도 못하는 매우 오노스런 상황이 된다.

[24] 물론 숙적인 emacs도 나름대로 "매우 다른" 방식으로 동작한다. 사실 알려진 우주에 존재하는 모든 파일 편집기는 viemacs, 그리고 그 외 - 이렇게 세 가지로 분류된다!