vim 과 tmux · vim 실전: 검색·치환·매크로 · 실습
vim 매크로와 레지스터
목표
매크로가 무엇인지 - 레지스터에 담긴 그냥 텍스트라는 것 - 를 직접 확인하고, 반복 가능한 매크로를 설계하는 방법을 익힙니다.
왜 중요한가
qa 로 기록한 매크로는 키 입력이 문자열 그대로 레지스터 a 에 저장된 것입니다. yank 와 매크로가 같은 a~z 공간을 쓰는 것도 그래서입니다. 이 사실을 알면 매크로를 파일로 꺼내 편집하고 다시 넣을 수 있고, 실습에서처럼 파일로 제출해 검증할 수도 있습니다. 그리고 반복 가능한 매크로에는 설계 원칙이 있습니다 - 시작점을 절대 고정하고, 이동은 내용 기준으로 하고, 마지막에 다음 대상으로 넘어간다. 이 셋 중 하나라도 빠지면 두 번째 줄부터 어긋납니다.
단계
/root/vmac 디렉터리에서 작업합니다. 매크로 파일에는 키 입력을 한 줄로 적습니다.
1. /root/vmac/list.txt 에 다음 6줄을 넣으세요.web01 / web02 / db01 / db02 / cache01 / queue01
2. 각 줄을 - web01 처럼 만드는 매크로 키 입력을 /root/vmac/macro1.txt 에, 적용 결과를 /root/vmac/bulleted.txt 에 저장하세요.
3. 각 줄을 "web01", 로 만드는 매크로를 /root/vmac/macro2.txt 에, 결과를 /root/vmac/quoted.txt 에 저장하세요. 이 매크로에는 ESC 문자가 반드시 들어가야 합니다.
4. 각 줄 앞에 1. , 2. 처럼 줄 번호를 붙이는 ex 명령을 /root/vmac/number.ex 에, 결과를 /root/vmac/numbered.txt 에 저장하세요.
5. /root/vmac/hosts.txt 에 다음 6줄을 넣으세요.web01.prod.example.com / web02.staging.example.com / db01.prod.example.com / db02.staging.example.com / cache01.prod.example.com / queue01.staging.example.com
그리고 staging 이 든 줄에만 맨 앞에 # 를 붙이는 명령을 /root/vmac/onlystaging.ex 에, 결과를 /root/vmac/staging.txt 에 저장하세요.
6. hosts.txt 에서 prod 가 든 줄만 모아 파일 맨 끝에 덧붙이는(총 9줄) 명령을 /root/vmac/collect.ex 에, 결과를 /root/vmac/collected.txt 에 저장하세요.
7. /root/vmac/table.txt 에 다음 5줄을 넣으세요.name=web01 / role=frontend / zone=seoul / port=8080 / tier=gold
각 줄을 NAME:web01 처럼 키는 대문자로, 등호는 콜론으로 바꾸는 매크로를 /root/vmac/macro3.txt 에, 결과를 /root/vmac/table_out.txt 에 저장하세요.
8. hosts.txt 에서 prod 줄만 남기고 앞에 - , 뒤에 :80 을 붙이는 명령들을 /root/vmac/final.ex 에, 결과를 /root/vmac/final.txt 에 저장하세요.
참고
- 채점기는 매크로 파일의 첫 줄을 레지스터에 넣고
:%normal @q로 모든 줄에 적용해 봅니다. :normal로 실행되는 삽입 모드는 명령이 끝날 때 자동으로 종료되므로, 마지막이 삽입인 매크로에는 ESC 가 없어도 됩니다. 중간에 삽입을 끝내야 할 때만 필요합니다.:reg a로 레지스터 내용을 눈으로 확인할 수 있습니다.- 흔한 실수 1: 2번의 매크로 끝 공백이 저장 과정에서 잘리면 결과가
-web01이 됩니다. - 흔한 실수 2: 6번에서 소문자 레지스터를 쓰면 매번 덮어써서 마지막 한 줄만 남습니다.
단계 8개
- 연습용 목록 만들기
- 첫 매크로: 글머리 기호 붙이기
- 매크로에 ESC 문자 넣기
- 줄 번호 매기기
- 조건에 맞는 줄에만 적용
- 흩어진 줄 한곳에 모으기
- 두 동작을 묶은 매크로
- 필터 + 접두 + 접미 종합