Vimscript 배우기 cho.books
제 1 장 · 원서 §1–2

첫걸음 — 메시지를 외치고 옵션을 다루다

Vim에게 말을 거는 가장 작은 명령에서 시작한다. :echo와 :echom, 그리고 Vim의 동작을 조각하는 수백 가지 옵션. 모든 Vimscript는 여기서 출발한다.

echo echom 불리언 옵션 값 옵션 주석

Section 01시작하기 전에

이 책은 단순히 읽기만 하는 책이 아닙니다. 모든 명령어를 직접 Vim에 입력하며 학습해야 합니다. 연습문제를 건너뛰지 마세요. 근육 기억을 만드는 것이 목표입니다.

Vimscript를 배우려면 먼저 Vim을 열어 두어야 합니다. 이 책의 모든 페이지에는 "다음 명령을 실행하세요"라는 지시가 가득합니다. 그것을 눈으로만 읽고 넘어간다면 아무것도 배우지 못합니다. Vim 창을 하나 띄워 두고, 모든 명령을 손가락으로 직접 입력하세요.

Vim에는 설정 파일 ~/.vimrc가 있습니다. 우리가 만들 매핑과 옵션은 결국 이 파일에 쌓여 갑니다. 아직 이 파일이 없다면 만들어 두세요. 빈 파일이어도 괜찮습니다.

학습 원칙 이 책의 영어 명령어·키 표기(:echo, <leader>, <cr> 등)는 모두 원문 그대로 둡니다. 한국어로 번역하면 Vim에 입력할 수 없기 때문입니다. 설명만 한국어로 읽고, 코드는 영어 그대로 입력하세요.

Section 02메시지 출력하기

가장 먼저 배울 명령은 echo입니다. Vim을 열고 다음 명령을 실행하세요:

vimscript — 화면에 메시지 출력
:echo "Hello, world!"

Vim이 창 하단에 Hello, world!를 표시할 것입니다. 간단하죠. 이제 이것과 거의 같은 명령을 실행해 보세요:

vimscript — 메시지 출력 + 로그 기록
:echom "Hello again, world!"

이번에도 Hello again, world!가 표시됩니다. 두 명령이 똑같아 보이지만, 결정적인 차이가 있습니다.

개념 echo 대 echom

:echo는 메시지를 화면에 출력하지만, 곧 사라집니다.

:echom(echo message)은 메시지를 출력하면서 동시에 메시지 로그에 영구히 기록합니다. 나중에 그 메시지를 다시 볼 수 있습니다.

이제 다음 명령을 실행해 메시지 로그를 확인하세요:

vimscript — 메시지 로그 보기
:messages

Vim이 echom으로 출력했던 메시지들의 목록을 보여줍니다. echo로 출력한 Hello, world!는 목록에 없을 것입니다. 사라졌기 때문입니다.

직관 디버깅을 할 때는 거의 항상 echom을 쓰세요. 메시지가 빠르게 지나가 버려도 :messages로 다시 확인할 수 있습니다. 단순히 잠깐 보여주기만 하면 될 때는 echo가 적당합니다.
모션 · echo와 echom의 차이 01 / 5
스페이스: 재생 · ← →: 단계 이동 · R: 리셋

Section 03지속적 출력과 주석

여러 메시지를 한 번에

한 줄에 여러 개의 echom을 두고 싶을 때가 있습니다. 명령들 사이를 파이프 문자(|)로 구분하면 됩니다:

vimscript — 한 줄에 여러 명령
:echom "foo" | echom "bar"

Vim은 이를 두 개의 별도 명령으로 취급합니다. :messages로 확인하면 두 줄 모두 보입니다.

주석

Vimscript에서 주석은 큰따옴표(")로 시작합니다. 따옴표부터 줄 끝까지가 주석으로 처리됩니다:

vimscript — 주석
" 이 줄은 주석입니다. Vim은 이 줄을 무시합니다.
:echom "이건 실행됩니다"  " 명령 뒤의 주석
함정 Vim 주석은 어디서나 작동하지 않습니다. 매핑 명령 안에서는 주석이 작동하지 않습니다. 다음 장에서 매핑을 배울 때 이 함정을 다시 만나게 됩니다. 지금은 "echo 같은 단순 명령에서는 주석이 되지만, 모든 곳에서 되는 건 아니다"라고만 기억하세요.

Section 04옵션 설정하기

Vim에는 동작 방식을 바꿀 수 있는 수많은 옵션이 있습니다. 옵션은 두 가지 주요 종류로 나뉩니다: 불리언 옵션("켜짐" 또는 "꺼짐")과 값을 갖는 옵션입니다.

불리언 옵션

다음 명령을 실행하세요:

vimscript — 불리언 옵션 켜고 끄기
:set number      " 줄 번호 켜기
:set nonumber    " 줄 번호 끄기

number는 불리언 옵션입니다. :set number로 켜고, 앞에 no를 붙인 :set nonumber로 끕니다. 모든 불리언 옵션이 이렇게 동작합니다.

옵션을 현재 상태의 반대로 토글할 수도 있습니다. 옵션 이름 뒤에 느낌표(!, "bang")를 붙이세요:

vimscript — 불리언 옵션 토글
:set number!     " 줄 번호가 다시 나타남
:set number!     " 다시 사라짐

옵션이 현재 어떻게 설정되어 있는지 묻고 싶다면 물음표(?)를 사용합니다:

vimscript — 옵션 상태 확인
:set number?     " "number" 또는 "nonumber"를 표시
개념 불리언 옵션의 세 가지 접미사

:set <name> — 옵션을 켭니다.

:set no<name> — 옵션을 끕니다.

:set <name>! — 옵션을 토글합니다(현재의 반대로).

:set <name>? — 옵션의 현재 값을 묻습니다.

Section 05값을 갖는 옵션

일부 옵션은 단순히 켜짐/꺼짐이 아니라 을 갖습니다. 다음 명령들을 실행하고 각각 실행 후 무슨 일이 일어나는지 확인하세요:

vimscript — 값 옵션
:set number
:set numberwidth=10
:set numberwidth=4
:set numberwidth?

numberwidth 옵션은 줄 번호를 담는 열의 너비를 바꿉니다. 값을 갖는 옵션은 :set <name>=<value>로 변경하고, 평소처럼 :set <name>?로 확인합니다.

타이핑을 줄이기 위해, 하나의 :set 명령에 여러 옵션을 한 번에 지정할 수도 있습니다:

vimscript — 여러 옵션을 한 번에
:set number numberwidth=6
옵션 종류 한눈에 보기
구분설정확인예시 옵션
불리언:set wrap / :set nowrap:set wrap?number, wrap, hlsearch
:set numberwidth=4:set numberwidth?numberwidth, textwidth, shiftwidth
토글:set number!불리언 옵션 전용
모션 · :set 명령의 해부 01 / 5
스페이스: 재생 · ← →: 단계 이동

Section 06연습문제

  • :help echo:help echom을 읽으세요. 두 명령의 차이를 문서로 확인하세요.
  • :help echoerr:help echon을 읽으세요. 어떤 상황에서 쓸지 상상해 보세요.
  • :help 'number'를 읽으세요(따옴표에 주의 — 옵션은 따옴표로 감쌉니다).
  • :help relativenumber, :help numberwidth, :help wrap, :help shiftround, :help matchtime을 읽으세요.
  • 이 옵션들을 원하는 대로 설정하는 줄 몇 개를 ~/.vimrc 파일에 추가하세요.
기억하세요 :help는 Vim 사용자의 가장 강력한 친구입니다. 이 책은 모든 것을 설명하지 않습니다 — 대신 어디를 봐야 할지 알려줍니다. 연습문제의 :help 항목을 건너뛰지 마세요.