10 Vim 기본 - 이전 명령 재실행(마이크로 매크로)

Vim Micro Macro

Vim Normal Mode 에서 이동 명령을 제외한 대부분의 명령은 하나의 '명령 블록'이다. 이 '명령 블록'은 재실행이 가능하다. 이전에 수행한 명령을 그 즉시 반복하고자 할 때, Micro Macro 를 활용하면, 키 입력 하나로 그 명령을 반복할 수 있다. Micro Macro 는 Normal Mode 에서 .키를 입력하는것으로 수행이 가능하다.

이전에 무엇을 행했듯, 그것은 Vim 에게 하나의 명령이고, 그 명령을 그대로 재실행하는 것이 Vim Micro Macro - Vim 마이크로 매크로다.

사실 거의 모든 명령에 대해 Micro Macro(Vim 점 명령어) 가 적용되기 때문에, 모든 예시를 다루기는 어렵고(사실 불가능하고) 여기서는 몇가지 코딩에 도움이 될만한 상황으로 Micro Macro(Vim 점 명령어) 를 알아보도록 하자.

💡 '마이크로 매크로'는 '매크로'와 다른 의미다. q 키로 시작하는 '매크로'는 훨씬 복잡하지만 강력한 반복 기능을 제공한다. 다만, '마이크로 매크로'는 이전 명령을 매우 간단히 반복할 수 있다는 데 의의가 있다. 이름은 '마이크로'이지만, 결코 작지 않은 기능이다.

예시1 - 한 줄 지우기(dd) 재실행

간단한 예시를 보자. 다음 코드에서 'invalid code'에 해당하는 라인만 전부 지우고 싶다고 가정하자. dd 명령어를 활용할 것이다.

Vim Micro Macro, 마이크로매크로를 활용하여 이전 명령어 반복하기

맨 처음 나타난 'invalid code' 를 지울 때에만 dd 를 사용했고, 이후에는 . 만 눌러도 해당 줄이 삭제되는 것을 확인할 수 있다. vim 에게 이전에 수행한 명령어는 dd 이고, 이를 . (Micro Macro - 마이크로 매크로)로 반복했다.

이 예제는 마이크로매크로가 작동하는 방식을 설명했을 뿐, 그다지 강력하다고 보기에는 힘들다(물론 충분히 편리하지만). 단순히 dd 의 2번의 키스트로크를 . 1번으로 줄였을 뿐이다. 다음 예시에서 더 많은 키스트로크를 줄이는 예를 살펴보자.

예시2 - 문자열 바꾸기(ciw) 재실행

다음 코드에서 나타나는 'execute' 를 'run' 으로 변경해야한다고 하자. 단, 주석에 포함되어있는 execute 는 그대로 두어야 하는 상황이라고 하자. 모든 execute 를 run 으로 바꾸어야 한다면 보통 에디터의 '찾아 바꾸기' 기능을 사용하면 그만이지만, 이 경우는, 대상의 속성에 따라서 대상을 바꾸어야 하는지 바꾸지 않아야 하는지 결정해주어야 한다. 그런 경우 이전 포스팅에서 살펴봤던 '찾기' 기능을 활용하여 다음 스크린샷과 같이 '스마트하게' 여러 문자열을 일괄적으로 변경할 수 있다. 특히, 동일한 문자열에 대해 일부는 변경해야 하는데, 일부는 그렇지 않을 때 이번 패턴이 도움이 된다.

찾기 기능(/)과 문자열바꾸기 기능(ciw) 그리고 마이크로 매크로(.)의 조합

이 때, ciw 를 입력한 뒤, 새로운 문자열을 입력하고 escape(esc) 로 빠져나온 순간까지가 하나의 '명령 블록' 이 된다. 즉 다음 키스트로크가 통째로 하나의 '명령 블록'이다.

[ciw + execute(문자열입력) + esc]

총 3 + (문자열길이 7) + 1 의 총 11 개의 키스트로크를 . 하나로 재실행했다. 이를 잘 활용하면, 특히 반복되는 명령에 대해서는 극적인 생산성 향상을 이뤄낼 수 있다.

Vim 의 Micro Macro 는 이와 같은 '명령 블록' 을 단숨에 실행시킬 수 있는 마법같은 기능이다.

예시3 - 여러줄의 시작에 동일한 문자열 삽입

현대 IDE, 텍스트에디터는 멀티커서 기능을 지원하기에 지금 보는 기능이 그다지 신선하지 않을 수는 있다. 하지만, 이 기능을 활용하면 다양한 응용이 가능하기에 그 의의가 있다.

객체의 멤버변수들의 접근제어자를 모두 public 으로 지정하고 싶다고 하자. 다음처럼.

마이크로 매크로(Vim . 커맨드)를 활용한 동일 작업의 반복

(말은 안되지만) 이제 위처럼 변경된 코드 중에 int 타입과 String 타입은 모두 앞으로 사용하지 않게 되어, @Deprecated 라는 데코레이터를 붙여줘야 된다고 가정하자. 그럼 다음과 같이 마이크로 매크로를 활용할 수 있다.

마이크로 매크로(Vim . 커맨드)를 활용한 동일 작업의 반복

이 외에도 응용은 무수히 많을 수 있다. 위 3가지 예시는 필자가 포스팅을 작성하면서 기억을 쥐어짜내 만들어냈기 때문에, 그다지 유용해보일 수 있지 않을지도 모르겠다. 아래 예시4부터는 필자가 실제로 코딩을 하다가 "이게 마이크로 매크로 쓰는 맛이지!!!" 라고 느끼는 순간에 돌아와 해당 상황으로 예시를 작성한 것이다.

예시4 - 업데이트 중

(... 실제로 코딩하다가 유용한 상황을 맞닥뜨리면 다시 와서 업데이트 하겠습니다...)


간단하지만 강력했다. 앞선 포스팅들에서 살펴본 모든 기능들을 마이크로 매크로와 접목시켜보자. 무궁무진한 응용이 가능할 것이다. 이제 명령어 '반복'이 남았다. 우리가 원하는 횟수만큼 해당 명령을 반복하여 수행하게끔 할 수 있다. 다음 포스팅에서는 '명령어 반복'에 대해서 살펴본다.

반응형

Designed by JB FACTORY