동작하는 코드
아래 텍스트가 Vim에 열려 있다고 생각해 보세요.
const userName = "Alice";
const userAge = 25;
const userEmail = "alice@example.com";
커서가 userName의 N 위에 있을 때, 다음 명령어를 입력해 보세요.
dw → "ame" 삭제 (커서부터 단어 끝까지)
d$ → 커서부터 줄 끝까지 삭제
cw → 커서부터 단어 끝까지 삭제하고 입력 모드 진입
Vim 명령어는 한국어 문장과 비슷한 구조를 가지고 있어요. "삭제해(d) 단어를(w)"처럼, 동사(오퍼레이터) 뒤에 **목적어(모션)**가 오는 형태예요.
직접 수정하기
이 코드에서 변수 이름을 리팩토링해 봅시다.
let result = calculateTotal(price, tax);
let message = "Total: " + result;
console.log(message);
result위에 커서를 놓고cw를 입력하세요.result가 삭제되고 입력 모드로 전환돼요.total을 입력하고Esc를 누르세요.- 두 번째 줄의
"Total: "위에서ci"— 따옴표 안의 내용만 바꿀 수 있어요 (이건 다음 레슨에서 자세히 배워요). console.log(message);줄에서d$로 줄 끝까지 삭제해 보세요.
"왜?"
Vim은 언어다
Vim 명령어는 문법 규칙을 가진 언어예요. 이 규칙만 이해하면, 명령어를 외우는 게 아니라 조합할 수 있어요.
오퍼레이터 (동사):
| 키 | 의미 | 설명 |
|---|---|---|
d | delete | 삭제 |
c | change | 삭제 후 입력 모드 진입 |
y | yank | 복사 |
모션 (목적어):
| 키 | 의미 |
|---|---|
w | 다음 단어 시작까지 |
e | 현재 단어 끝까지 |
$ | 줄 끝까지 |
0 | 줄 시작까지 |
gg | 파일 처음까지 |
G | 파일 끝까지 |
조합 테이블
오퍼레이터와 모션을 조합하면 이렇게 돼요.
w | e | $ | 0 | gg | G | |
|---|---|---|---|---|---|---|
d | dw | de | d$ | d0 | dgg | dG |
c | cw | ce | c$ | c0 | cgg | cG |
y | yw | ye | y$ | y0 | ygg | yG |
3개의 오퍼레이터와 6개의 모션만 알면, 18가지 명령어를 사용할 수 있어요.
숫자를 더하면 더 강력해진다
오퍼레이터 앞이나 모션 앞에 숫자를 붙이면 반복 횟수를 지정할 수 있어요.
d2w → 단어 2개 삭제
3dd → 현재 줄부터 3줄 삭제
y5j → 현재 줄부터 아래로 5줄 복사
줄 단위 단축키
오퍼레이터를 두 번 입력하면 현재 줄 전체에 적용돼요.
dd → 현재 줄 삭제
yy → 현재 줄 복사
cc → 현재 줄 삭제 후 입력 모드
d와 c의 차이
d와 c는 둘 다 텍스트를 삭제하지만, c는 삭제 후 자동으로 입력 모드에 진입해요. 텍스트를 다른 내용으로 교체할 때 c를 쓰세요.
dw → 단어 삭제, 노멀 모드 유지
cw → 단어 삭제, 입력 모드 진입 → 바로 새 단어 입력 가능
심화 학습
자주 쓰는 축약 명령어
일부 오퍼레이터+모션 조합은 축약 키가 있어요.
| 축약 | 원래 명령어 | 의미 |
|---|---|---|
D | d$ | 줄 끝까지 삭제 |
C | c$ | 줄 끝까지 바꾸기 |
Y | yy | 줄 복사 (주의: y$가 아님) |
x | dl | 한 글자 삭제 |
s | cl | 한 글자 바꾸기 |
변수 리팩토링 연습
아래 코드를 Vim에서 열고, 오퍼레이터+모션 조합만 사용해서 수정해 보세요.
var oldName = "hello";
var oldValue = 42;
console.log(oldName + oldValue);
목표:
- 모든
var를const로 변경 (cw사용) oldName을greeting으로 변경 (cw사용)- 마지막 줄 전체를 삭제 (
dd사용)
힌트: /old로 검색하면 빠르게 이동할 수 있어요.
question: "d2w는 어떤 동작을 하나요?" options:
question: "cc와 dd의 차이는 무엇인가요?" options:
question: "다음 중 커서부터 줄 끝까지 복사하는 명령어는?" options: