동작하는 코드
아래처럼 5개 항목에 따옴표를 추가해야 한다고 생각해보세요.
apple
banana
cherry
date
elderberry
한 줄씩 수동으로 편집하면 5번 같은 작업을 반복해야 해요. 하지만 매크로를 사용하면 한 번만 보여주면 돼요.
qa ← 레지스터 a에 녹화 시작
0 ← 줄 맨 앞으로 이동
i" ← 앞에 따옴표 삽입
Esc
A" ← 뒤에 따옴표 삽입
Esc
j ← 다음 줄로 이동
q ← 녹화 종료
이제 4@a를 누르면 나머지 4줄이 한 번에 처리돼요.
"apple"
"banana"
"cherry"
"date"
"elderberry"
직접 수정하기
아래 JavaScript 코드에서 각 줄 끝에 세미콜론이 빠져 있어요. 매크로로 한 번에 추가해보세요.
const name = "dale";
const age = 30;
const city = "seoul";
const lang = "ko";
const role = "dev";
- 첫 번째 줄에 커서를 놓고
qa로 녹화를 시작하세요 A;로 줄 끝에 세미콜론을 추가하세요Esc,j로 다음 줄로 이동하세요q로 녹화를 종료하세요4@a로 나머지 줄에 적용하세요
CSV 데이터를 변환하는 것도 시도해보세요.
name,age,city
dale,30,seoul
kim,25,busan
각 줄에서 쉼표를 탭으로 바꾸려면: qa0f,r\tjf,r\tjq — 이런 식으로 매크로 안에서 검색과 치환을 조합할 수 있어요.
"왜?"
매크로는 Vim의 녹화 버튼이에요. 카세트 레코더를 떠올려보세요 — 녹음 버튼(q)을 누르고, 연주하고, 다시 녹음 버튼을 눌러 멈추면 돼요. 재생(@)은 원하는 만큼 반복할 수 있어요.
왜 0으로 시작하나요? 매크로는 녹화한 그대로 재생해요. 커서가 줄 중간에 있는 상태에서 녹화하면, 재생할 때도 그 위치를 기준으로 동작해요. 0으로 줄 맨 앞으로 이동하면 어떤 줄에서든 동일하게 동작하도록 위치를 정규화할 수 있어요.
왜 j로 끝내나요? 매크로가 끝난 후 다음 줄로 이동해야 10@a처럼 여러 번 반복할 때 각 줄에 순서대로 적용돼요. j 없이 끝내면 같은 줄에서 계속 매크로가 실행돼요.
레지스터는 뭔가요? qa에서 a는 매크로를 저장할 공간의 이름이에요. a부터 z까지 26개의 레지스터를 사용할 수 있어서, 여러 매크로를 동시에 저장해둘 수 있어요.
심화 학습
매크로 핵심 명령어 정리
| 명령 | 동작 |
|---|---|
qa | 레지스터 a에 녹화 시작 |
q | 녹화 종료 |
@a | 레지스터 a의 매크로 실행 |
@@ | 마지막으로 실행한 매크로 반복 |
10@a | 매크로 a를 10번 반복 |
:reg a | 레지스터 a의 내용 확인 |
매크로가 중간에 멈추면?
매크로는 에러가 발생하면 자동으로 중단돼요. 예를 들어 f,로 쉼표를 찾는 매크로인데 쉼표가 없는 줄을 만나면 거기서 멈춰요. 이 성질을 이용하면 100@a처럼 넉넉하게 반복 횟수를 지정해도 안전해요 — 더 이상 처리할 줄이 없으면 알아서 멈추니까요.
아래 텍스트를 HTML 리스트로 변환하는 매크로를 만들어보세요.
변환 전:
사과
바나나
체리
변환 후:
<li>사과</li>
<li>바나나</li>
<li>체리</li>
힌트: qa0i<li>EscA</li>Escjq로 녹화하고 2@a로 반복하세요.
question: 매크로를 레지스터 b에 녹화하려면 어떤 키를 눌러야 하나요? answers:
question: 매크로 a를 20번 반복 실행하려면? answers:
question: 매크로를 녹화할 때 0으로 시작하는 이유는? answers: