\cat learning
Learning vi
Huidae Cho
- UNIX 기본편집기 vi
- 시작하기
- Input 모드로
- Command 모드로
- ex 모드로
- 끝내기
- 커서이동
- 지우기
- 찾기
- 치환
- 취소
- 복사 및 이동
- 줄병합 및 명령반복
- 범위 지정
- 기타
UNIX 기본편집기 vi
vi는 University of California at Berkeley에서 처음 만들어진 편집기로서 많은 UNIX계열에서 기본편집기로 쓰이고 있다. 일반적인 편집기와 달리 세가지 모드로 구성되어 있어 초보자가 배우기에는 약간의 어려움이 있다. 하지만 한 번 익숙해지고 그 강력함에 맛을 들인다면 다른 편집기는 사용하지 못 할 정도가 될 것이다.
시작하기
우선 'vi --help'를 프롬프트에서 입력함으로써 여러가지 옵션들을 볼 수 있다. 이 옵션들은 시스템에 따라 다소 차이가 있다. 하지만 개인적으로 이 옵션들은 잘 사용하지 않으므로 한 가지만 간단히 소개하겠다.
vi filename
위 명령으로 vi 편집을 시작할 수 있다. 만약 파일의 #번째 줄에서 편집을 시작하려면 다음과 같이 실행한다.
vi +# filename
예를 들어
vi +5 filename
이렇게 하면 다섯번째 줄에서 시작한다. 마지막 줄에서 시작하려면 다음과 같다.
vi +$ filename
물론 $는 마지막 줄을 의미한다. 만약 원하는 패턴이 처음 나타나는 줄에서 편집을 시작하려면 다음과 같이 실행한다.
vi +/pattern/ filename
a | 커서 오른쪽에서 입력시작 |
i | 커서 왼쪽에서 입력시작 |
o | 현재 줄 아래 빈 줄 삽입 |
A | 현재 줄 끝에서 입력시작 |
I | 현재 줄 처음부터 입력시작 |
O | 현재 줄 위에 빈 줄 삽입 |
Command 모드로
Input 모드에서 ESC를 누른다.
ex 모드로
Command 모드에서 :를 입력한다.
끝내기
ZZ | 저장하고 종료 |
:q | 파일이 수정되지 않았거나 이미 저장되었으면 종료 |
:q! | 파일의 수정여부를 무시하고 무조건 종료 |
:wq | 저장하고 종료. ZZ와 동일 |
커서이동
h | 왼쪽으로 |
l | 오른쪽으로 |
k | 위쪽으로 |
j | 아래쪽으로 |
0 | 현재 줄의 처음으로 |
$ | 현재 줄의 마지막으로 |
W | 오른쪽 단어의 처음으로 |
w | W와 유사. W는 단어를 공백으로 구분하지만 w는 < > . , 등으로 구분 |
B | 왼쪽 단어의 처음으로 |
b | B와 유사. 구분자는 w와 동일 |
E | 오른쪽 단어의 마지막으로 |
e | E와 유사. 구분자는 w와 동일 |
( | 현재 문장의 처음으로 |
) | 다음 문장의 처음으로 |
{ | 현재 문단의 처음으로 |
} | 현재 문단의 마지막으로 |
H | 화면의 첫 줄로 |
M | 화면의 중간 줄로 |
L | 화면의 마지막 줄로 |
#G | #번째 줄로. ex) 15G |
G | 마지막 줄로 |
^F | 한 화면 아래로 |
^D | 반 화면 아래로 |
^B | 한 화면 위로 |
^U | 반 화면 위로 |
지우기
x | 한 글자 지우기 |
dd | 한 줄 지우기 |
#dd | 현재 줄에서 #개의 줄 지우기 |
d#d | #dd와 동일 |
dw | 한 단어 지우기 |
#dw | 현재 단어에서 #개의 단어 지우기 |
D | 현재 위치에서 줄의 마지막까지 지우기 |
찾기
f# | 글자 #를 앞방향으로 찾기 |
F# | 글자 #를 뒷방향으로 찾기 |
/# | 패턴 #를 앞방향으로 찾기 |
?# | 패턴 #를 뒷방향으로 찾기 |
치환
r# | 현재 위치 글자를 #로 치환 |
R | 현재 위치에서 덮어 쓰기 |
s | 현재 위치 글자를 문자열로 치환 |
S | 현재 줄을 문자열로 치환 |
취소
u | 이전 명령 취소 |
U | 현재 줄에서 행한 명령 취소 |
복사 및 이동
#yy | #개의 줄을 버퍼로 복사 |
#yw | #개의 단어를 버퍼로 복사 |
#dd | #개의 줄을 버퍼로 이동. 삭제와 동일 |
#dw | #개의 단어를 버퍼로 이동. 삭제와 동일 |
p | 버퍼내용을 현재 줄 아래에 붙이기 |
P | 버퍼내용을 현재 줄 위에 붙이기 |
줄병합 및 명령반복
범위 지정
m# | 현재 줄을 마크 #로 지정. ex) ma |
:'#, '## w filename | 마크 #에서 마크 ##까지 filename으로 저장. ex) :'a, 'b w filename |
기타
:w | 파일명이 지정되었을 때 저장 |
:w filename | 파일명을 지정하면서 저장 |
:#, ## w filename | #번째 줄에서 ##번째 줄까지 filename으로 저장 |
:r filename | filename의 내용 삽입 |
:r !shellcommand | shellcommand를 셸에서 실행한 결과 삽입 |
:e filename | filename 편집 |
:!shellcommand | shellcommand를 셸에서 실행 |
:map # list_of_key_strokes | 매크로 # 정의. Key strokes에 알파벳 이외의 입력이 있으면 Ctrl+V를 먼저 누르고 입력. ex) ":map a iabcd" a라는 명령은 abcd를 입력한다. |