DaleSchool

매크로: 반복은 Vim에게

입문20분

학습 목표

  • q{reg}로 매크로를 녹화할 수 있다
  • @{reg}로 매크로를 실행할 수 있다
  • 숫자와 조합하여 여러 번 반복할 수 있다
  • 실무에서 유용한 매크로 패턴을 작성할 수 있다

동작하는 코드

아래처럼 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";
  1. 첫 번째 줄에 커서를 놓고 qa로 녹화를 시작하세요
  2. A;로 줄 끝에 세미콜론을 추가하세요
  3. Esc, j로 다음 줄로 이동하세요
  4. q로 녹화를 종료하세요
  5. 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: