VIM 매크로 사용법
embulk 설정 파일 작업 중인데 input JSON 메시지가 종류가 많다보니 columns 정의해주는게 만만찮다.
각 메시지 샘플을 보고 일일이 타이핑하기 귀찮아서 간만에 vim 매크로 이용해본 김에 메모.
매크로 기본 사용법
- 이하 설명은 가독성 고려해서 'A'라는 매크로명으로 매크로 기록하고 사용한다고 가정.
- 이해하기 쉽게 매크로명이라고 했으나 정확히는 매크로가 저장될 register 주소로 a ~ z 사용 가능.
매크로 기록
- qA -> 작업 -> q
- q 로 시작해서 q로 끝난다.
- 시작 q 다음은 매크로명.
- 레코딩 끝난 후 기록된 내용 보려면 reg(ister)명령을이용하면 된다. 가령 위 예에서 매크로명을 'A'라고 했으니 ':reg A' 라고 하면 된다.
매크로 실행
qA
3회 반복 실행
3qA
매크로 편집
현재 커서 위치에 기록된 매크로 내용 표시.
"Ap
출력된 매크로 내용에서 작업 수정/추가 등을 한 후 편집한 내용 다시 등록.
"Ayy
매크로 저장
작성한 매크로를 저장해서 계속 재사용하고 싶다면 보통 VIM 설정 파일에 기록해두는 방법을 사용한다.
vim 설정 파일 열기.
사용하는 vim 종류 등에 따라 ~/.vimrc 등을 편집하면 될텐데 내 경우는 윈도우에 nvim 쓰고 있어서 다음과 같이 해서 init.vim 파일을 편집한다.
:e $MYVIMRC
매크로 내용 표시
"Ap
편집. 매크로 내용을 Single Quotation 으로 감싸준다.
let @A='출력된 매크로 내용'
저장 후 변경 설정 다시 읽어들이기
:so $MYVIMRC
기타 1
- command 창에서 vim 매크로 사용할 수 있는 방법이라는데 아직 테스트해보진 못했음.
기타 2
가령 아래와 같이 등록해놓은 매크로가 있다고 해보자.
let @A=':$s/$/,:%s/M1/R1/g^M::%s/N1/R2/g^M'
매크로 적용될 텍스트 중에 'M1'이라는 단어가 없다면 'E486: Pattern not found' 에러 나면서 이 후 명령이 실행되지 않는다.
이런 경우 'e' 옵션을 사용하면 에러 무시하고 실행되므로 아래와 같은 식으로 수정하면 된다.
let @A=':$s/$/,:%s/M1/R1/eg^M::%s/N1/R2/eg^M'
명령 실행 후 엔터키 치는 것에 대응하는게 '^M'이다. 매크로를 편집한다고 할 때 명령문 입력 후 끝에 '^M' 입력해주려면
- 윈도우 : Ctrl-q, Ctrl-m
- 기타 OS : Ctrl-v, Ctrl-m
- 당연한데도 종종 실수하는게 명령 모드 아니라 입력 모드에서 해줘야 한다는거.
명령 모드 들어가는 ESC 키는 '^[' ( Ctrl-q, Ctrl-[ )
아래와 같이 매크로 내용에 Single Quotation ' 이 들어가는 경우에는 어떻해야 할까?
let @A=':$s/'/"/g^M'
당연히 에러 발생. 이런 경우에는 Single Quotation을 두 개, 그러니까 다음과 같이 하면 된다.
let @A=':$s/''/"/g^M'