Emacs: 숫자 범위 포함 텍스트 생성

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

Emacs: 숫자 범위 포함 텍스트 생성

나는 Vim과 Emacs를 모두 사용할 줄 알지만, 콘솔에서 간단한 로그 파일이나 설정 파일을 잠시 확인할 때를 빼고는 Emacs를 사용한다. 얼마 전 트위터에서 Vim의 흥미로운 기능을 봤다. 숫자 범위를 포함한 텍스트를 간단히 생성하는 방법이다.

Vim의 모든 기능을 Emacs에서 따라할 필요는 없겠지만, 매우 편리한 기능인 것 같아 Emacs에서는 어떻게 할 수 있을 지 생각해 보았다. 정규 표현식으로 찾기/바꾸기를 하며 카운터를 사용할 수도 있지만, Vim의 데모와 비교하면 너저분하다. 좀더 단순한 방법이 있으면 좋겠다.

다행히 비슷한 작업을 하는 방법을 찾았다. Vim과는 방법이 조금 다르지만, 쉽게 원하는 결과를 얻을 수 있다.

Kmacro-set-format

첫 번째 방법은 kmacro-set-format을 사용한 방법이다. 절차는 다음과 같다.

  1. C-x C-k C-f 입력
  2. 미니 버퍼에 Macro Count Format으로 - server-%d <RET> 입력
  3. C-x C-k C-c 입력해 시작 값을 지정. 0부터 시작한다면 이 절차는 생략 가능
  4. <F3><F3><RET> 입력. <F3>을 한 번 누르면 키보드 매크로 카운터 시작, 다시 <F3>을 다시 누르면 단계 2에서 지정한 형식으로 키보드 매크로 카운터 입력. <RET>로 줄바꿈.
  5. <F4>를 입력해 키보드 매크로 카운터 종료.
  6. C-u 9 <F4>를 입력해 - server-2부터 server-10 생성

위 단계 2에서 %d가 숫자가 대입될 부분이다. %02d와 같이 지정하면 01, 02와 같은 식으로 숫자를 생성할 수 있다.

Tiny

두 번째는 Tiny란 패키지를 이용하는 방법이다. 패키지를 설치해야 하지만 위 방법보다 단순하다. Tiny 패키지가 설치된 상태라면 다음과 같이 작업할 수 있다.

  1. C-SPC로 마크 설정
  2. m1\n10|- server-%02d 입력
  3. C-;를 입력해 - server-01부터 - server-10 생성
  4. C-x C-x로 단계 3에서 생성한 텍스트 블럭을 선택
  5. TAB으로 들여쓰기

여기서 핵심은 단계 2의 m1\n10이다. m은 아마도 매크로(macro)를 나타내는 것 같다. 바로 다음 숫자가 시작, \n은 행 바꿈, 그 다음은 마지막 숫자다. 중간에 \n 없이 m1 10으로 하면 1부터 10까지 한 행에 생성한다. 이렇게 생성한 번호를 파이프(|)로 포맷 - server-%02d에 넘겨 원하는 행을 생성한다.

처음에 마크를 설정해야 하는 것이 번거롭다. kmacro-set-format을 사용했을 때와 달리 Tiny로 생성한 행은 자동 들여쓰기가 되지 않아 수동으로 들여쓰기를 실행해야 하므로 생성한 텍스트 블록만 선택하기 위해서 필요하다.

참고