\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를 입력한다. |