본문 바로가기
C.W.K.
Stream
Lesson 04 of 08 · published

모달 컨셉

~14 min · vim, modes, mental-model

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

Vim이 박혀 있는 단 하나의 아이디어

일반 에디터에선 모든 키가 글자를 쳐. Vim에선 모든 키가 모드에 따라 다른 일을 해. Normal mode에서 j는 아래로 이동. Insert mode에서 j는 글자 j를 입력. 같은 키, 완전히 다른 효과.

하루 정도는 낯설지만, 그 다음부턴 오히려 당연하게 느껴져 — 에디터에서 하는 일 대부분은 새 글자 타이핑이 아니라 이미 있는 텍스트의 이동과 재배치거든. Vim은 흔한 케이스에 최적화돼 있어.

매 분마다 쓰는 네 가지 모드

  • Normal mode (기본). 키가 명령어야 — 이동, 삭제, 복사, 붙여넣기, 검색. 시간 대부분을 여기서 보내. Esc 누르면 항상 여기로 돌아와.
  • Insert mode. 키가 글자를 쳐. 일반 에디터와 똑같이. i (또는 변형들) 로 진입. Esc 로 나옴.
  • Visual mode. 텍스트를 먼저 고르고 나서 명령을 걸어. v (글자), V (줄), Ctrl-v (사각형 블록) 로 들어가.
  • Command-line mode. : 치고 명령어. 저장, 종료, 검색-치환, 설정 — 스크립트로 짤 수 있는 건 전부 여기서 해.

모드는 이상한 습관이 아니라 설계야

모드 없는 에디터에선 명령마다 modifier를 붙여야 해. Cmd+S, Ctrl+F, Ctrl+Shift+K. 손가락이 편하게 닿는 조합은 금방 동나. Normal mode에선 모든 키가 명령이 될 수 있어. modifier 하나 없이 50개가 넘고, 거기에 대문자까지 더해져. Vim은 글자를 받는 데 홈 row를 쓰지 않으니까, 그만큼 키보드 자리가 남아도는 거야.

정신적 전환: 모드 없는 에디터에선 타이핑을 하다가 가끔 명령을 섞어. Vim에선 명령을 내리다가 가끔 타이핑을 섞고. 하루의 대부분은 Insert mode가 아니야. Normal mode에서 이미 써둔 걸 다듬는 시간이지.

지금 어느 모드인지 알아보는 법

  • 왼쪽 아래 status에 -- INSERT --, -- VISUAL --, -- VISUAL LINE --, -- VISUAL BLOCK --이 뜨고, 아무것도 없으면 Normal mode야.
  • 터미널이 지원하면 모드마다 커서 모양이 달라져. Normal은 네모, Insert는 막대기.
  • 글자를 쳤는데 엉뚱한 일이 벌어지면, Normal mode에서 키가 명령으로 먹히고 있는 거야. i를 눌러 타이핑을 시작하든가, Esc로 Normal mode인지부터 확인해.

Esc 반사

Vim 쓰는 사람은 다 같은 반사가 생겨. 동작과 동작 사이에 Esc를 쳐서 Normal mode에 닻을 내리는 거야. 헷갈리면 일단 Esc. 사격할 때 "방아쇠에서 손가락 떼기"랑 같은 습관이야. 일주일이면 몸에 붙어.

Code

손가락에 박힐 모드 전환·vim
Esc      " 어디서든 → Normal mode
i        " Normal → Insert (커서 앞)
a        " Normal → Insert (커서 뒤)
I        " Normal → Insert (줄 시작)
A        " Normal → Insert (줄 끝)
o        " Normal → Insert (아래 새 줄)
O        " Normal → Insert (위 새 줄)
v        " Normal → Visual (글자)
V        " Normal → Visual (줄)
Ctrl-v   " Normal → Visual (블록)
:        " Normal → Command-line
Status 줄 — 모드 공간 어디에 있는지·text
(비어있음)            → Normal mode
-- INSERT --          → Insert mode
-- VISUAL --          → Visual (글자)
-- VISUAL LINE --     → Visual (줄)
-- VISUAL BLOCK --    → Visual (블록)
:                     → Command-line mode (명령 대기)
/  or  ?              → 검색 prompt (command-line 의 일종)

External links

Exercise

스크래치 파일 열어. Insert mode로 몇 줄 쓰고, 그 다음 의식적으로 이 루프를 열 번 돌려: Esc 누르고, j/k로 이동, i 또는 a로 다시 Insert, 단어 하나 치고, Esc. 모드가 바뀌는 느낌에 집중해 — 그게 퀘스트의 나머지가 깔고 가는 머슬 메모리야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.