LabHub
배우기 러닝패스 코스

vimとtmux

vimのマクロとレジスタ

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

매크로가 무엇인지 - 레지스터에 담긴 그냥 텍스트라는 것 - 를 직접 확인하고, 반복 가능한 매크로를 설계하는 방법을 익힙니다.

왜 중요한가

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 에 저장하세요.

참고

연습용 목록 만들기

/root/vmac/list.txt 에 다음 6줄을 넣으세요. web01 / web02 / db01 / db02 / cache01 / queue01

6줄 정확히. 순서도 맞춰야 합니다.

첫 매크로: 글머리 기호 붙이기

각 줄을 - web01 처럼 만드는 매크로 키 입력을 /root/vmac/macro1.txt 에, 적용 결과를 /root/vmac/bulleted.txt 에 저장하세요.

I 는 줄 맨 앞에서 입력을 시작합니다. 매크로 마지막의 공백 한 칸까지 파일에 그대로 저장돼야 합니다.

매크로에 ESC 문자 넣기

각 줄을 "web01", 로 만드는 매크로를 /root/vmac/macro2.txt 에, 결과를 /root/vmac/quoted.txt 에 저장하세요. 이 매크로에는 ESC 문자가 반드시 들어가야 합니다.

삽입 모드에서 빠져나오는 키도 매크로의 일부입니다. vim 에서 Ctrl-V 를 누른 뒤 Esc 를 누르면 그 문자가 파일에 들어갑니다.

줄 번호 매기기

각 줄 앞에 1. , 2. 처럼 줄 번호를 붙이는 ex 명령을 /root/vmac/number.ex 에, 결과를 /root/vmac/numbered.txt 에 저장하세요.

줄마다 값이 달라지므로 고정 문자열로는 안 됩니다. 치환의 바꿀 자리에서 식(expression)을 평가하게 만드는 문법이 있습니다.

조건에 맞는 줄에만 적용

/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 에 저장하세요.

:g/패턴/normal 키입력 형태로 줄 필터와 Normal 모드 키를 결합합니다.

흩어진 줄 한곳에 모으기

hosts.txt 에서 prod 가 든 줄만 모아 파일 맨 끝에 덧붙이는(총 9줄) 명령을 /root/vmac/collect.ex 에, 결과를 /root/vmac/collected.txt 에 저장하세요.

소문자 레지스터는 덮어쓰고 대문자 레지스터는 덧붙입니다. 모은 뒤 파일 끝에 붙여넣으세요.

두 동작을 묶은 매크로

/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 에 저장하세요.

텍스트 객체로 단어 하나를 대문자로 바꾸고, 문자 찾기와 한 글자 치환을 이어 붙입니다.

필터 + 접두 + 접미 종합

hosts.txt 에서 prod 줄만 남기고 앞에 - , 뒤에 :80 을 붙이는 명령들을 /root/vmac/final.ex 에, 결과를 /root/vmac/final.txt 에 저장하세요.

앞에서 쓴 기법들을 순서대로 조합하세요. 남길 줄을 먼저 고르는 것이 순서상 유리합니다.