'^W'에 해당되는 글 1건

  1. 2013.02.06 반복적인 작업 녹화하기

반복적인 작업을 녹화해서 작업하는 동영상이다. 이것은 ID랑 똑같은 것을 찾아서 뒷 부분에 이메일 주소를 넣어주는 영상이다.

지금은 몇 줄 안되서 그러지만, 이것이 수십, 수백, 수천줄이면 정말 상당히 유용할 것이다.


녹화는 사용자의 작업을 기억해두었다가 다시 작동시키는 일종의 매크로 기능이다.


녹화 시작

qa를 누르면 상태바에 recording 이라는 메시지가 표시되면서 녹화가 시작된다. 

q 는 녹화를 시작하거나 종료할 때 쓰는 명령이다. 

a 는 녹화할 매크로의 이름이다. 매크로 이름으로는 영문 소문자를 사용해야 한다. 녹화된 내용은 녹화가 끝난 후 동일한 이름의 레지스터에서 확인할 수 있다.


ID 복사

고객을 식별하는 기준이 되는 고객 번호를 복사해야 하므로, ^ 눌러 커서의 행 맨 앞부분으로 이동시킨 후 yiw 명령을 실행하여 단어를 복사한다.


고객 번호로 검색

복사했던 번호를 /<CTRL-R>" 을 명령하여 찾는다. 그 후 2w를 눌러 이메일 앞까지 커서를 옮긴다. 그 다음 y$를 하여 복사한다.

CTRL-R" 이것은 ""p 와 같고, 위의 영상으로선 "ap 와 같다. 


clientlist.txt에 주소 붙여넣고 녹화 끝내기

A를 눌러 행의 맨 뒤로 커서를 이동, 입력 모드로 전환하여  쉼표를 입력하고 ESC를 눌러 입력 모드를 종료한다. 그 다음 p를 눌러 메일 주소를 붙여 넣는다.


녹화된 내용 재생

@a 라고 명령한다.

@ 은 녹화를 재생하는 명령이다.

a 는 녹화했던 레지스터의 이름이다.

그리고 @@ 는 바로 이전에 실행했던 녹화 내용을 다시 실행하는 명령이다.


녹화와 재생 명령어

q<매크로 이름>                녹화를 시작한다. 매크로 이름은 {a-zA-Z} 중 선택해야 한다.

@<매크로 이름>               매크로를 실행한다. 매크로 이름은 {a-z} 중 선택해야 한다.

@@                                    바로 이전에 실행된 매크로를 재실행한다.


대문자 이름은 바로 이 레지스터를 수정할 때 사용한다. 

즉, qA 로 녹화를 시작하면, a 레지스터에 녹화된 내용에 새로 녹화하는 내용이 추가된다. 만약 a 레지스터에 녹화한 적이 없으면서 qA 로 녹화를 시작한다면 qa 명령과 동일한 기능을 수행한다.


녹화 내용 확인하기

:reg a 로 내용을 볼 수 있다. 

^W 는 <CTRL-W> 이다.

^M 은 Enter 이다.

^[ 는 ESC 이다.


범위를 지정하여 매크로 수행하기

각 행마다 수동으로 @a를 누르는 과정은 여전히 비효율적이다. 만약 수정할 파일이 수천 행 정도로 길다면 보통 고역이 아닐 것이다. 그래서 문서 전체를 한 번에 처리할 수 있는 방법을 알아야한다.

:%normal! @a

% 는 문서 전체를 의미한다.

normal 은 바로 뒤에 나오는 문자열을 일반 모드의 명령어로 인식하라는 뜻이다. (norm 으로 축약 가능)


ex) %normal! ^^X     이것은 맨 왼쪽으로 가서 숫자를 1씩 감소시키라는 명령이 된다.

숫자를 5씩 증가 시키려면 %normal! ^^A


매크로 수정하기

이메일 주소에 ""로 감싸려고 한다면, 다시 녹화를 진행하는 것보단 수정하는 편이 더 효율적이다.

"ap 명령하면 레지스터 a의 내용이 입력된다. 이제 이것을 가지고 수정하면 된다.

"ay$ 를 명령하여 레지스터 a 의 내용을 업데이트 시킨다.


Tip: 

여기서는 레지스터 전체를 불러오고 내용을 수정한 후, 수정된 내용 전체를 레지스터 a에 다시 입력했다.

하지만 레지스터의 맨 뒤에 내용을 추가하는 것과 같이 간단한 경우에는 대문자로 녹화를 하면 된다. 예를 들어 위와 같은 경우는 qA 로 녹화하면 추가 모드로 녹화가 진행된다.

 

q: 와 q/ 명령

q:명령행 모드의 과거 기록을 보여준다.

q/과거 검색어 목록을 보는 기능이다.

이전에 실행했던 명령어나 검색어의 목록을 개별 창에서 보면서 선택할 수 있는 유용한 기능이다. q:나 q/ 로 보이는 이력 창은 일반 창과 동일하게 작동하므로 :q 로 닫으면 된다.





현재 디렉토리에 있는 모든 파일들의 <stdio.h> 문장을 찾아서 <aaaaa.h> 로 바꾸는 작업.



:n * 는 현재 디렉토리의 모든 파일을 버퍼로 가져온다.

999@b 는 b 레지스터를 999번 재생한다. (현재 디렉토리의 파일이 999개 미만이라고 가정)


그리고 여기서 가장 중요한 것 %s/<stdio.h>/<aaaaa.h>/ge 이 부분이다. 

특히, 이 부분에서 e 이것이다. e 는 에러 발생시 무시하는 명령이다. 이 명령이 없으면 찾는 문자열이 없을 경우 재생이 중단되어버린다.


'Vim > Tutorial' 카테고리의 다른 글

vim Regular Expression  (0) 2013.05.12
프로그래밍할 때 유용한 기능  (0) 2013.02.06
자동화  (0) 2013.02.05
오퍼레이션 펭딩 모드 / 약어 매크로 / 레지스터 활용  (0) 2013.02.05
공백 지우기  (0) 2013.02.05
Posted by scii
: