Emacs: 숫자 범위 포함 텍스트 생성
나는 Vim과 Emacs를 모두 사용할 줄 알지만, 콘솔에서 간단한 로그 파일이나 설정 파일을 잠시 확인할 때를 빼고는 Emacs를 사용한다. 얼마 전 트위터에서 Vim의 흥미로운 기능을 봤다. 숫자 범위를 포함한 텍스트를 간단히 생성하는 방법이다.
Vim의 모든 기능을 Emacs에서 따라할 필요는 없겠지만, 매우 편리한 기능인 것 같아 Emacs에서는 어떻게 할 수 있을 지 생각해 보았다. 정규 표현식으로 찾기/바꾸기를 하며 카운터를 사용할 수도 있지만, Vim의 데모와 비교하면 너저분하다. 좀더 단순한 방법이 있으면 좋겠다.
다행히 비슷한 작업을 하는 방법을 찾았다. Vim과는 방법이 조금 다르지만, 쉽게 원하는 결과를 얻을 수 있다.
Kmacro-set-format
첫 번째 방법은 kmacro-set-format
을 사용한 방법이다. 절차는 다음과 같다.
C-x C-k C-f
입력- 미니 버퍼에
Macro Count Format
으로- server-%d <RET>
입력 C-x C-k C-c
입력해 시작 값을 지정. 0부터 시작한다면 이 절차는 생략 가능<F3><F3><RET>
입력.<F3>
을 한 번 누르면 키보드 매크로 카운터 시작, 다시<F3>
을 다시 누르면 단계 2에서 지정한 형식으로 키보드 매크로 카운터 입력.<RET>
로 줄바꿈.<F4>
를 입력해 키보드 매크로 카운터 종료.C-u 9 <F4>
를 입력해- server-2
부터server-10
생성
위 단계 2에서 %d
가 숫자가 대입될 부분이다. %02d
와 같이 지정하면 01
, 02
와 같은 식으로 숫자를 생성할 수 있다.
Tiny
두 번째는 Tiny란 패키지를 이용하는 방법이다. 패키지를 설치해야 하지만 위 방법보다 단순하다. Tiny 패키지가 설치된 상태라면 다음과 같이 작업할 수 있다.
C-SPC
로 마크 설정m1\n10|- server-%02d
입력C-;
를 입력해- server-01
부터- server-10
생성C-x C-x
로 단계 3에서 생성한 텍스트 블럭을 선택TAB
으로 들여쓰기
여기서 핵심은 단계 2의 m1\n10
이다. m
은 아마도 매크로(macro)를 나타내는 것 같다. 바로 다음 숫자가 시작, \n
은 행 바꿈, 그 다음은 마지막 숫자다. 중간에 \n
없이 m1 10
으로 하면 1부터 10까지 한 행에 생성한다. 이렇게 생성한 번호를 파이프(|
)로 포맷 - server-%02d
에 넘겨 원하는 행을 생성한다.
처음에 마크를 설정해야 하는 것이 번거롭다. kmacro-set-format
을 사용했을 때와 달리 Tiny로 생성한 행은 자동 들여쓰기가 되지 않아 수동으로 들여쓰기를 실행해야 하므로 생성한 텍스트 블록만 선택하기 위해서 필요하다.