DaleSchool

동사와 목적어: 오퍼레이터 + 모션

입문20분

학습 목표

  • 오퍼레이터(d, c, y)와 모션의 조합 원리를 설명할 수 있다
  • dw, d$, cw 같은 조합을 사용할 수 있다
  • 숫자와 모션을 조합할 수 있다
  • Vim 명령어의 문법 구조를 이해한다

동작하는 코드

아래 텍스트가 Vim에 열려 있다고 생각해 보세요.

const userName = "Alice";
const userAge = 25;
const userEmail = "alice@example.com";

커서가 userNameN 위에 있을 때, 다음 명령어를 입력해 보세요.

dw      → "ame" 삭제 (커서부터 단어 끝까지)
d$      → 커서부터 줄 끝까지 삭제
cw      → 커서부터 단어 끝까지 삭제하고 입력 모드 진입

Vim 명령어는 한국어 문장과 비슷한 구조를 가지고 있어요. "삭제해(d) 단어를(w)"처럼, 동사(오퍼레이터) 뒤에 **목적어(모션)**가 오는 형태예요.

직접 수정하기

이 코드에서 변수 이름을 리팩토링해 봅시다.

let result = calculateTotal(price, tax);
let message = "Total: " + result;
console.log(message);
  1. result 위에 커서를 놓고 cw를 입력하세요. result가 삭제되고 입력 모드로 전환돼요. total을 입력하고 Esc를 누르세요.
  2. 두 번째 줄의 "Total: " 위에서 ci" — 따옴표 안의 내용만 바꿀 수 있어요 (이건 다음 레슨에서 자세히 배워요).
  3. console.log(message); 줄에서 d$로 줄 끝까지 삭제해 보세요.

"왜?"

Vim은 언어다

Vim 명령어는 문법 규칙을 가진 언어예요. 이 규칙만 이해하면, 명령어를 외우는 게 아니라 조합할 수 있어요.

오퍼레이터 (동사):

의미설명
ddelete삭제
cchange삭제 후 입력 모드 진입
yyank복사

모션 (목적어):

의미
w다음 단어 시작까지
e현재 단어 끝까지
$줄 끝까지
0줄 시작까지
gg파일 처음까지
G파일 끝까지

조합 테이블

오퍼레이터와 모션을 조합하면 이렇게 돼요.

we$0ggG
ddwded$d0dggdG
ccwcec$c0cggcG
yywyey$y0yggyG

3개의 오퍼레이터와 6개의 모션만 알면, 18가지 명령어를 사용할 수 있어요.

숫자를 더하면 더 강력해진다

오퍼레이터 앞이나 모션 앞에 숫자를 붙이면 반복 횟수를 지정할 수 있어요.

d2w     → 단어 2개 삭제
3dd     → 현재 줄부터 3줄 삭제
y5j     → 현재 줄부터 아래로 5줄 복사

줄 단위 단축키

오퍼레이터를 두 번 입력하면 현재 줄 전체에 적용돼요.

dd      → 현재 줄 삭제
yy      → 현재 줄 복사
cc      → 현재 줄 삭제 후 입력 모드

d와 c의 차이

dc는 둘 다 텍스트를 삭제하지만, c는 삭제 후 자동으로 입력 모드에 진입해요. 텍스트를 다른 내용으로 교체할 때 c를 쓰세요.

dw  → 단어 삭제, 노멀 모드 유지
cw  → 단어 삭제, 입력 모드 진입 → 바로 새 단어 입력 가능

심화 학습

자주 쓰는 축약 명령어

일부 오퍼레이터+모션 조합은 축약 키가 있어요.

축약원래 명령어의미
Dd$줄 끝까지 삭제
Cc$줄 끝까지 바꾸기
Yyy줄 복사 (주의: y$가 아님)
xdl한 글자 삭제
scl한 글자 바꾸기

변수 리팩토링 연습

아래 코드를 Vim에서 열고, 오퍼레이터+모션 조합만 사용해서 수정해 보세요.

var oldName = "hello";
var oldValue = 42;
console.log(oldName + oldValue);

목표:

  1. 모든 varconst로 변경 (cw 사용)
  2. oldNamegreeting으로 변경 (cw 사용)
  3. 마지막 줄 전체를 삭제 (dd 사용)

힌트: /old로 검색하면 빠르게 이동할 수 있어요.

question: "d2w는 어떤 동작을 하나요?" options:

question: "cc와 dd의 차이는 무엇인가요?" options:

question: "다음 중 커서부터 줄 끝까지 복사하는 명령어는?" options: