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

Insert Mode — 텍스트 입력

~10 min · vim, insert-mode, basics

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

Insert mode로 들어가는 길이 여덟 개나 되는 이유

Vim에는 "타이핑 시작" 키가 하나만 있는 게 아니야. 비슷한 키가 한 무리 있고, 저마다 커서를 다른 자리에 놔줘. i랑 a의 차이는 사소해 보이지만, 1년쯤 편집하다 보면 아낀 motion이 수천 번으로 쌓여.

여덟 개의 입구

  • i — 커서 앞에 넣기.
  • a — 커서 뒤에 붙이기 ("append").
  • I — 줄에서 공백이 아닌 첫 글자 앞에 넣기.
  • A — 줄 끝에 붙이기.
  • o — 아래에 새 줄을 열고 타이핑 시작.
  • O — 위에 새 줄을 열고 타이핑 시작.
  • s — 커서 위 글자를 지우고 타이핑 시작.
  • S — 줄 전체를 지우고 타이핑 시작.

Normal mode로 돌아가기

정통 출구는 Esc야. Ctrl-[도 완전히 똑같고, 키보드 대부분에서 홈 row에 더 가까워. Ctrl-c로도 나가지는데 이건 abbreviation 확장을 건너뛰어 — Insert mode용 abbreviation을 만들어놨는데 이번엔 발동시키기 싫을 때 쓸모가 있어.

제일 사랑받는 매핑: Insert mode에서 jj나 jk를 Esc에 매핑하는 거야. 구석까지 손을 뻗는 대신 홈 row에 붙어 있는 두 키로 끝나거든. 진짜 코드에서 jj를 칠 일은 거의 없으니까 잘못 걸릴 걱정도 없어.

생각보다 훨씬 중요한 이유

A;랑 $a;는 한 키 차이야. o랑 $a<Enter>는 두 키 차이고. 이게 하루에 수천 번 일어나. Vim이 빨라 보이는 건 무슨 대단한 트릭 하나 때문이 아니야. 자주 하는 동작이란 동작은 전부 설계 단계부터 키 하나짜리 입구를 갖고 있어서야.

Code

Insert 변형 — 의식적으로 하나 골라가며 연습·vim
i    " 커서 앞 insert
a    " 커서 뒤 insert
I    " 줄 시작 (공백 아닌 첫 글자) insert
A    " 줄 끝 insert
o    " 아래 새 줄 + insert
O    " 위 새 줄 + insert
s    " 글자 substitute (한 개 삭제 + insert)
S    " 줄 substitute (줄 삭제 + insert)
Insert mode 나가는 세 가지 방법·vim
Esc       " 정통 출구
Ctrl-[    " Esc 와 동일, 손이 더 가까움
Ctrl-c    " abbreviation / autocmd 안 발동시키고 나감
고전 jk → Esc 매핑·vim
" Vimscript — ~/.vimrc 에 추가
inoremap jj <Esc>
inoremap jk <Esc>
Lua 버전 (Neovim)·lua
-- ~/.config/nvim/init.lua 에 추가
vim.keymap.set("i", "jj", "<Esc>")
vim.keymap.set("i", "jk", "<Esc>")

External links

Exercise

아무 소스 파일이나 열어. 화살표 키도 마우스도 쓰지 말고, Insert mode 입구를 딱 하나씩만 써서 세 가지를 해봐. (1) 아무 줄 끝에 // TODO 붙이기, (2) 기존 줄 두 개 사이에 빈 줄 하나 넣기, (3) 단어의 첫 글자를 대문자로 바꾸기. 속도가 아니라 첫 시도에 맞는 입구를 고르는 게 목표야.

Progress

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

댓글 0

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

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