카테고리 없음

VIM 매크로 사용법

tzara 2021. 4. 14. 11:22

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

기타 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'