vi 에디터 사용법
1. vi 시작하기: vi filename
2. vi 끝내기: :w (save하기, 끝나지는 않는다.)
:q (빠져나옴,고치지 않았을때)
:wq (또는 ZZ) (save하고 빠져나옴)
:q! (고친 것을 포기하고 빠져나옴)
3. vi의 두 모드(mode)
1) 편집모드
- 화면 맨 아랫쪽 첫째 column에 ":"가 없는 경우를 말함. (vi를 시작했을 때 상태 그대로가 편집모드이다.)
- 대부분의 명령은 알파벳 글자 하나를 누름으로써 수행된다.
- 편집모드에는 string의 수정(R, replace), 삽입( i 또는 a, insert), 대치(s, substitution)모드 등이 별개로 존재하고 각 모드는 Esc키를 누름으로써 끝난다.
2) Command모드
- 편집모드에서 사용자가 ":"(콜론)을 쳐서 화면 맨 아랫쪽 첫째 column에 ":"가 있는 경우를 말함.
- command모드는 ":"를 쳐서 시작하고 엔터를 침으로써 끝이 난다.
- 이후 ":"로 시작되는 명령어는 모두 command모드를 의미한다.
4, cursor의 이동
명 령 | 설 명 |
h l k j 0 $ w b :n 엔터 G 또는 :$ 엔터 | '←'와 같다. *되도록 화살표키를 사용하지 말고 "h,l,k,j"를 사용하도록 ! '→'와 같다. ( 키보드에서 손을 떼지않고 cursor를 이동시킬 수 있고 '↑'와 같다. 터미날 Type에 구애받지 않는 vi 장점 중의 장점 ) '↓'와 같다. cursor가 있는 현재 line의 첫 column으로 cursor가 있는 현재 line의 맨끝으로 다음 단어로(forward) 이전 단어로(backward) 파일의 n번 line으로 파일의 마지막 line으로 * Command모드에서 "."는 현재 line을, "$"는 마지막 line을 뜻한다. |
5. 화면의 이동
명 령 | 설 명 |
CTRL-f CTRL-b CTRL-d CTRL-u | 화면을 한 페이지씩 앞으로(forward) 이동 화면을 한 페이지씩 뒤로(backward) 이동 화면을 앞으로(downward) scroll 이동 화면을 뒤로(upward) scroll 이동 |
6. 수정 & 삽입 & 삭제
명 령 | 설 명 |
r R | 현재 cursor 위치의 한 글자를 뒤이어 치는 한 글자로 바꿈.(그런다음 자동으로 편집모드로 복귀) 수정모드 시작 (현재 cursor 위치부터 Esc키를 누를 때까지 입력하는 글자들로 계속 덮어 씀) |
i a | 삽입모드 시작 (현재 cursor 위치에 Esc키를 누를 때까지 입력되는 글자들을 삽입) 삽입모드 시작 (현재 cursor 뒤로 Esc키를 누를 때까지 입력되는 글자들을 삽입) |
s | 대치모드 시작 (현재 cursor 위치의 한 글자를 Esc키를 누를 때까지 입력되는 글자들로 대치) |
x D dd ndd :n,m d 엔터 :.,m d 엔터
| 현재 cursor 위치의 한 글자를 지운다. 현재 line의 cursor 이후의 글자들을 지운다 현재 cursor가 있는 line을 지운다. 현재 line부터 n개의 line을 지운다. n번 line에서 m번 line까지 지움. 현재 line에서 m번 line까지 지움. * vi에서는 지워진 내용을 임시기억장소(buffer)에 저장하므로 지운 내용을 "p" 또는 "P"로 다른 곳에 복사할 수 있다. (7. 복사 & 이동 참조) |
7. 검색 및 치환 (Search & Replace)
명 령 | 설 명 |
/string 또는 :s/string 엔터 | string을 찾는다 - 다음 occurrence는 "n"(forward) 또는 "N"(backward)으로 찾는다. |
:n,m s/string1/string2 엔터
:n,m s/string1/string2/g 엔터
:n,m s/string1/string2/gc 엔터
| n번 line에서 m번 line까지의 "string1" 중 각 line에서 첫 번째로 나오는 "string1"만을 "string2"로 바꿈.
n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꿈.
n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꾸되 각각에 대해서 confirm을 한다.(y/n 물어봄.) |
8. 복사 & 이동
모드 | 명령 | 설 명 |
편집 모드 | yy 또는 Y nyy 또는 nY dd ndd p P
| 현재 line을 버퍼에 저장. 현재 line부터 n개의 line을 버퍼에 저장 현재 line을 지우고 그 내용을 버퍼에 저장. 현재 line부터 n개의 line을 지우고 내용을 버퍼에 저장 버퍼의 내용을 현재 line뒤에 붙인다.(paste) 버퍼의 내용을 현재 line앞에 붙인다. * vi에서는 임시기억장소(buffer,버퍼)를 사용하므로 어느 한 부분을 버퍼에 넣어 "p" 또는 "P"로 이동하거나 복사할 수 있다. ( 버퍼는 다른 내용이 들어가면 그 이전 내용은 지워진다. ) |
command 모드 | :n1,n2 y :n1,n2 t n3 :n1,n2 m n3 | n1번 line에서 n2번 line까지를 버퍼에 저장.(버퍼내용을 쓸때는 "p 또는 P") n1번 line에서 n2번 line까지를 n3번째 line 뒤에 복사 n1번 line에서 n2번 line까지를 n3번째 line 뒤로 이동(move) |
9. 꼭 알아두어야 할 것들
1) vi에서의 모든 명령은 소문자,대문자를 구별한다.
2) 수정(R), 삽입(i 또는 a), 대치(s) 등의 "string을 입력"하는 작업이 끝나면 반드시 Esc키를 눌러서 각 모드(수정,삽입,대치모드)가 끝났으며, 그 다음에 치는 글자는 '편집모드의 명령어'임을 vi에게 알려주는 것을 잊지말도록 !
3) 편집모드의 명령 앞에 숫자가 입력되면 그 숫자만큼 명령을 반복하라는 뜻이 된다. (예)글자"a"를 삽입하는 경우 명령은 "ia Esc"이지만, 만약에 "13ia Esc"라고 치면 "a"가 13개 삽입된다.
4) 그밖의 중요한 명령들.....
이전 명령의 반복 | (편집모드에서) "."를 친다. - vi 최대의 장점, vi-Editng실력은 "."활용에서부터 ! |
이전 명령의 취소(undo) | (편집모드에서) "u"를 친다. |
n번째 column으로 가고싶을때 | n| ( n값이 현재 line 끝의 column을 초과하면 cursor는 line 끝에 머문다. ) |
현재 line과 다음 line을 합할 때(join) | J |
현재 line을 분리할 때 | 분리하고자 하는 위치에 "엔터"를 삽입(insert)한다.("i"명령이용) |
line번호를 보면서 작업할려면? auto-indent를 하고 싶을 때 right margin을 주고 싶을 때 현재가 어떤 모드인지 display 괄호가 잘 match되는지?
| ( command모드에서 setting을 한다. ":set all 엔터"하면 모든 option이 출력된다.) :set nu 엔터 (없앨때는 :set nonu 엔터) :set ai 엔터 (없앨때는 :set noai 엔터) :set wm=8 엔터 (right margin 8 column) :set showmode 엔터 :set showmatch 엔터
* c-shell을 사용하는 system이라면 아래와 같이 "EXINIT"이라는 environment변수를 설정하여 미리 vi를 setting 할 수 있다. % setenv EXINIT 'set nu ai wm=8 showmode' 엔터 |
현재 편집 중인 파일이름이 무엇이며 총 line수는 얼마인지? | : f 엔터 또는 CTRL-g |
n번째 line에서 m번째 line까지를 다른 이름의 파일로 저장하고 싶을때 | :n,m w filename 엔터 ( 이미 filename이 있는 경우에 덮어쓰는 경우라면 :n,m w! filename 엔터 ) |
다른 파일을 불러올 때 | :re filename 엔터 (현재 line 뒤에 붙는다) |
댓글