
Vim의 매크로(Macro) 기능을 활용하면 에디터 내에서 수행한 일련의 작업을 기록한 뒤, 필요할 때마다 손쉽게 재생할 수 있습니다.
이 글에서는 Vi와 Vim 편집기에서 매크로를 기록하고 재생하는 방법을 두 가지 상세한 예제를 통해 단계별로 설명합니다.
Vim 매크로 기록 및 재생 핵심 흐름
- 기록 시작:
q키를 누른 후 매크로 이름으로 사용할 소문자 알파벳 하나를 입력합니다. - 작업 수행: Vim에서 평소처럼 편집 작업을 진행하면 해당 동작들이 모두 기록됩니다.
- 기록 종료:
q키를 다시 눌러 기록을 중지합니다. - 매크로 재생:
@키와 함께 매크로 이름을 입력하면 기록된 작업이 실행됩니다. - 반복 재생: 여러 번 반복하려면
:NN@a형식으로 입력합니다. 여기서 NN은 반복 횟수입니다.
예제 1: Vim 매크로로 파일 안에 순차 번호 생성하기
1단계: 시퀀스 생성용 파일 열기
먼저 순차 번호를 생성할 파일을 엽니다.
$ vim sequence-test.txt
2단계: 입력 모드에서 "1." 타이핑
Esc i를 눌러 입력 모드로 전환한 뒤 1.을 입력합니다.
$ vim sequence-test.txt 1.
3단계: 기록 시작 후 레지스터 a에 저장
Esc q를 누른 뒤 a를 입력합니다.
q는 기록을 시작한다는 의미입니다.a는 기록 내용을 레지스터 a에 저장한다는 의미입니다.qa를 입력하면 화면 하단에 "recording"이라는 메시지가 표시됩니다.
4단계: 첫 번째 줄을 복사해 두 번째 줄에 붙여넣기
Esc yy를 누른 뒤 p를 입력합니다.
yy는 현재 줄 전체를 복사(yank)하는 명령입니다.p는 방금 복사한 줄을 아래에 붙여넣습니다.
$ vim sequence-test.txt 1. 1.
참고: 이 시점에도 하단에는 여전히 recording 메시지가 표시되어 있습니다.

그림: Vim 하단에 표시된 recording 메시지
5단계: 숫자 증가시키기
Ctrl+a를 입력합니다.
커서를 두 번째 줄에 위치시킨 상태에서 Ctrl+a를 누르면 숫자가 2로 증가합니다.
$ vim sequence-test.txt 1. 2.
참고: 이 단계에서도 하단에는 계속 recording 메시지가 유지됩니다.
6단계: 기록 종료
q를 입력합니다.
q를 누르면 기록이 중지되며, 하단에 있던 recording 메시지가 사라진 것을 확인할 수 있습니다.
7단계: 매크로를 98번 반복 실행
98@a를 입력합니다.
@a는 매크로 a를 한 번 재생합니다.98@a는 매크로 a를 98번 반복 실행하여 아래 그림처럼 1~100까지의 순차 번호를 자동으로 생성합니다.

그림: Vim 매크로를 활용한 순차 번호 생성 결과
예제 2: 서로 다른 인자로 Vim 매크로 반복 실행하기
이 예제에서는 동일한 명령 구조를 각 줄의 다른 값(인자)에 적용하는 방법을 설명합니다. 즉, 같은 명령 형식을 만들어 놓고 줄마다 다른 인자만 바꿔가며 자동으로 완성하는 것입니다.
매크로 실행 전: change-password.sql
$ vim change-password.sql Annette Warren Anthony Preston Kelly Taylor Stiller Dennis Schwartz
매크로 기록 및 실행 후: change-password.sql
$ vim change-password.sql ALTER USER Annette IDENTIFIED BY 'Annette'; ALTER USER Warren IDENTIFIED BY 'Warren'; ALTER USER Anthony IDENTIFIED BY 'Anthony'; ALTER USER Preston IDENTIFIED BY 'Preston'; ALTER USER Kelly IDENTIFIED BY 'Kelly'; ALTER USER Taylor IDENTIFIED BY 'Taylor'; ALTER USER Stiller IDENTIFIED BY 'Stiller'; ALTER USER Dennis IDENTIFIED BY 'Dennis'; ALTER USER Schwartz IDENTIFIED BY 'Schwartz';
1단계: 이름 목록이 있는 SQL 파일 열기
$ vim change-password.sql Annette Warren Anthony Preston Kelly Taylor Stiller Dennis Schwartz
2단계: 기록 시작 후 레지스터 a에 저장
qa를 입력합니다.
q는 기록 시작을 의미합니다.a는 레지스터 a에 저장한다는 의미입니다.qa입력 시 하단에 recording 메시지가 나타납니다.
3단계: 입력 모드로 전환해 ALTER USER 입력
I(대문자 i)를 누른 뒤 ALTER USER 를 입력합니다.
첫 번째 줄 아무 곳에 커서를 놓고 I를 누르면 커서가 해당 줄의 첫 문자로 이동합니다. 이어서 ALTER USER를 타이핑합니다.
4단계: 다음 단어(이름) 복사
Esc w yw를 차례로 입력합니다.
Esc를 누른 후w를 눌러 다음 단어(이름)로 커서를 이동합니다.yw는 현재 단어(이름)를 복사합니다.
5단계: 줄 끝으로 이동해 IDENTIFIED BY ' 입력
Esc A를 누른 뒤 IDENTIFIED BY '를 입력합니다.
Esc후A를 누르면 커서가 줄 끝으로 이동합니다. 공백 한 칸을 입력하세요.- 이어서 IDENTIFIED BY '를 타이핑합니다.
6단계: 복사해 둔 이름 붙여넣기
Esc p를 입력합니다.
Esc를 누른 후 p를 입력하면 4단계에서 복사했던 이름이 붙여넣어집니다.
7단계: 마지막 따옴표 닫기
Esc A를 누른 뒤 ';를 입력합니다.
Esc 후 A로 줄 끝으로 이동한 다음 ';를 타이핑하면 문장이 완성됩니다.
8단계: 다음 줄로 이동 후 기록 종료
Esc j를 누른 뒤 q를 입력합니다.
j는 커서를 다음 줄로 이동시킵니다.q는 기록을 종료합니다.
참고: 하단의 recording 메시지가 사라지면 기록이 완료된 것입니다. 이 시점의 change-password.sql은 아래 그림과 같습니다.

그림: Vim 매크로 기록 완료 화면
9단계: 남은 줄에 대해 매크로 반복 실행
8@a를 입력합니다.
@a는 매크로 a를 한 번 재생합니다.8@a는 매크로 a를 8번 반복 실행하여 나머지 모든 줄을 아래 그림처럼 자동으로 완성합니다.

그림: Vim 매크로 재생 완료 화면
추천 도서
Ramesh Natarajan의 <Vim 101 Hacks>. 필자는 명령줄 애호가로서, 당연히 Vi와 Vim 편집기의 열렬한 팬이기도 합니다. 몇 년 전 리눅스에서 C 코드를 많이 작성하던 시절에는 구할 수 있는 Vim 관련 팁과 트릭을 거의 대부분 읽었습니다. 그동안 쌓아 온 Vim 경험을 바탕으로, 고급 Vim 기능을 다루는 101가지 실전 예제를 담아 편집 속도와 생산성을 크게 높여 주는 eBook <Vim 101 Hacks>를 집필했습니다. Vi와 Vim을 오래 사용해 왔다 해도 이 책을 읽지 않았다면 꼭 읽어 보시길 권합니다. Vim 편집기의 놀라운 잠재력에 감탄하게 될 것입니다.
함께 읽으면 좋은 Vim 관련 아티클
다음은 도움이 될 만한 Vi / Vim 편집기 관련 튜토리얼입니다.
- Vimperator 애드온으로 Firefox 브라우저에 Vim 편집기 기능 더하기
- c.vim 플러그인으로 Vim을 C/C++ IDE처럼 사용하기
- Vim 편집기를 어떤 프로그래밍 언어든 지원하는 아름다운 소스 코드 브라우저로 변환하기
- Vim 편집기를 위한 강력한 찾기·바꾸기 예제 12선
참고: The Geek Stuff를 구독하면 앞으로 소개될 Vi와 Vim 편집기 팁과 트릭을 놓치지 않을 수 있습니다.