본문 바로가기
C.W.K.
Stream
Lesson 01 of 06 · published

문법 — operator + motion

~13 min · vim, grammar, composability

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

Vim은 키 목록이 아니라 언어야

Vim에 명령이 천 개쯤 있는 것처럼 보이는 이유는, 작은 operator 묶음과 작은 motion 묶음을 합쳐서 수백 개 동사를 공짜로 만들어내기 때문이야. delete-to-next-word를 통째로 외우는 게 아니라, d (삭제) 와 w (다음 단어) 를 외우면 dw는 저절로 따라와.

공식

[count] {operator} [count] {motion}

count는 안 붙여도 돼. 양쪽에 다 붙이면 곱해져 (3d2w는 6단어 삭제니까 d6w6dw랑 같아). operator가 무엇을이고 motion이 어디까지야. 문법은 이게 전부야.

가장 자주 쓸 operator 다섯

  • d — delete (지우면서 복사도 해).
  • c — change (지우고 Insert mode로 들어가).
  • y — yank (지우지 않고 복사).
  • > — 오른쪽으로 들여쓰기.
  • < — 왼쪽으로 내어쓰기.

첫날부터 알아두면 좋은 두 번째 묶음도 있어. = (자동 정렬), gu / gU (소문자·대문자로), g~ (대소문자 뒤집기), gq (문단을 줄 폭에 맞춰 다시 정렬).

두 번 누르면 줄 전체에 걸려

Vim에 예쁜 지름길이 하나 있어. operator를 두 번 누르면 지금 줄 전체에 걸려. dd는 줄 삭제, yy는 줄 복사, cc는 줄 바꾸기, >>는 줄 들여쓰기야. 두 번 누른 키가 operator + 줄의 줄임말인 셈이지.

조합이 핵심이야. dw, de, db, d$, d^, dG를 하나씩 외우는 건 지쳐. d랑 motion 목록만 외워두면 둘이 알아서 붙어. Vim이 끝이 없어 보이는 건 실제로 끝이 없어서야 — motion인 건 전부 삭제 대상도 되거든.

대문자 변형

많은 operator가 "줄 끝까지"를 뜻하는 대문자 짝을 갖고 있어. D = d$, C = c$, 그리고 Y는 역사적으로 yy (줄 단위 복사) 였어. 예외가 바로 이 Y야. 요즘 Neovim은 일관성을 위해 기본값을 Y = y$로 바꿔놨는데, 고전 Vim은 여전히 Y = yy거든. 머신을 옮겨 다닐 거면 알아둬.

Code

operator + motion = 동사·vim
dw      " 다음 단어 까지 삭제
d3w     " 다음 3 단어 삭제
d$      " 라인 끝까지 삭제
d0      " 라인 시작까지 삭제
dG      " 여기부터 파일 끝까지 삭제
cw      " 다음 단어까지 change (delete + insert)
c$      " 라인 끝까지 change (C 와 동일)
yiw     " inner word yank (text-object 미리보기)
>>      " 라인 오른쪽 indent
<<      " 라인 왼쪽 indent
=ap     " paragraph 주변 auto-format
두 번 누르기 — 줄 단위 단축·vim
dd     " 현재 라인 삭제
yy     " 현재 라인 yank
cc     " 현재 라인 change
>>     " 현재 라인 indent
<<     " 현재 라인 dedent
==     " 현재 라인 auto-indent
guu    " 현재 라인 lowercase
gUU    " 현재 라인 uppercase
Count가 문법과 합쳐져·vim
5dd     " 5 라인 삭제
3>>     " 3 라인 indent
10x     " 10 캐릭터 삭제
d3w     " 3 단어 삭제 (3dw 와 동일)
2d3w    " 6 단어 삭제 (count 가 곱해짐)

External links

Exercise

소스 파일을 열고, 키를 누르기 전에 결과를 먼저 말해봐. (1) d3w, (2) c$, (3) 5dd, (4) guu, (5) =ap. 누르기 전에 효과를 한 문장으로 설명할 수 있으면 문법이 박힌 거야.

Progress

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

댓글 0

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

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