반복적인 작업 녹화하기
Vim/Tutorial 2013. 2. 6. 01:13 |반복적인 작업을 녹화해서 작업하는 동영상이다. 이것은 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 |