vi의 실행
셀 상태에서 다음과 같은 방법으로 들어간다.
vi - 파일을 열지 않고 vi 상태로 들어감
vi file - 지정한 file을 vi에서 열기
vi -R file - 읽기 전용 모드로 file을 vi에서 열기
Mode의 종류
1. Last Line Mode(끝행 모드 = 명령행 모드)
2. Command Mode(명령 모드)
3. Insert Mode(입력 모드)
Mode 변경
명령모드 -> 끝행모드 :, /, ? 등의 해당 키
명령모드 -> 입력모드 a, i, ... 해당 키
입력모드 -> 명령모드 esc 키
끝행모드 -> 명령모드 자동으로(q 등으로 빠져나가지 않으면)
끝행모드 <-> 입력모드 명령모드를 거치지 않고는 바로 모드 변경이 안 됨
1. Last Line Mode (끝행 모드)
/exp : exp를 현재부터 아래로 검색
?exp : exp를 현재부터 위로 검색
:set number : 행번호를 보여준다
:set nonumber : 행번호를 안 보여준다
:!command : 셀 명령어 수행(ex. :!ls)
:shell : 셀로 빠져나감. 복귀는 exit.
:map : 정의된 매크로 보기
:map a com : a가 com과 같도록 매크로 정의
(ex. :map q 32G ;명령모드에서 q를 누르면 32행으로 감)
:w : 현재 내용을 open한 이름으로 저장(write)
:w file : 현재 내용을 file로 저장
:w >> file : 현재 내용을 file에 추가
:w! file : 현재 내용을 강제로 file에 저장
:q : vi에서 빠져나감(quit)
:q! : vi에서 강제로 빠져나감(저장 안 함)
:wq : 저장하고 빠져나감(write and quit). (= :x)
:x : 저장하고 빠져나감(save and exit)
:f : 현재 line의 상태
:r : 버퍼의 파일 read(읽기. 삽입된다고 생각하면 됨)
:r file : 지정한 file을 read
:e : 현재 파일을 다시 edit(편집. vi에서 open한다 생각하면 됨)
:e! : 현재 파일을 강제로 edit(버퍼의 내용을 무시하고)
:e file : 지정한 file을 edit
:e! file : 지정한 file을 강제로 edit
:3 :3행으로 커서 이동 (= 3G ;명령모드에서)
:3d : 3행을 삭제
:3m8 : 3행을 8행 다음으로 이동(move)
:3co8 : 3행을 8행 아래에 복사(copy)
:3t8 : 3행을 8행 아래에 복사
:3w file : 3행을 file에 저장
:3,8d : 3-8행을 삭제
:3,8m12 : 3-8행을 12행 다음으로 이동
:3,8co12 : 3-8행을 12행 다음으로 복사(= :3,8t12)
:3,8w file : 3-8행을 file에 저장
:s/old/new : 현재 행부터 처음의 old를 new로 바꿈
:s/old/new/g : 현재 행부터 모든 old를 new로 바꿈
:3s/old/new : 3행 중에서 old를 new로 바꿈
:3,8s/old/new : 3-8행 중에서 old를 new로 바꿈
:3,$s/old/new : 3행 이후로 old를 new로 바꿈
:%s/old/new : 모든 행에서 처음의 old를 new로
:%s/old/new/g : 모든 행에서 모든 old를 new로
:s/old/&new/ : old에 new를 추가
Tip :%s/^M//g : ascii file에 대한 dos-to-unix 변환
(여기서, ^M은 Ctrl-V, Ctrl-M 으로 찍어야 한다.)
2. Command Mode (명령 모드)
h : 왼쪽으로 커서 이동
j : 아래쪽으로 커서 이동
k : 위쪽으로 커서 이동
l : 오른쪽으로 커서 이동
G : 마지막 행으로 이동
3G : 3행으로 이동
0 : 행의 처음으로 이동(숫자 zero임)
$ : 행의 끝으로 이동
^ : 현재 행의 공백 아닌 첫 문자로 이동
H : (Home) 화면의 첫 행, 처음(첫 열)으로 이동
M : (Middle)화면의 중간 행, 처음으로 이동
L : (Last) 화면의 마지막 행, 처음으로 이동
w : 다음 단어의 첫 문자로 이동
W : 다음 단어의 첫 문자로 이동(문장 부호 무시)
e : 다음 단어의 끝 문자로 이동
E : 다음 단어의 끝 문자로 이동(문장 부호 무시)
b : 이전 단어의 첫 문자로 이동
B : 이전 단어의 첫 문자로 이동(문장 부호 무시)
3w : 3단어 다음 단어의 첫 문자로 이동
3b : 3단어 앞의 첫 문자로 이동
- : 커서를 이전 행의 처음으로 이동
+ : 다음 행의 처음으로 이동
( : 이전 문장의 처음으로 이동
) : 다음 문장의 처음으로 이동
{ : 이전 문단의 처음으로 이동
} : 다음 문단의 처음으로 이동
n : 순방향 검색 반복(위쪽이든 아래쪽이든)
N : 역방향 검색 반복
x : 커서 위치의 한 문자 삭제
X : 커서 왼쪽의 한 문자 삭제
3x : 커서 위치부터 3 문자 삭제
3X : 커서 왼쪽의 3 문자 삭제
dw : 한 단어 삭제
3dw : 세 단어 삭제
dd : 한 행 삭제
d0 : 행의 처음부터 커서 이전까지 삭제
d$ : 커서부터 행의 끝까지 삭제 (= D)
D : 커서부터 행의 끝까지 삭제
dG : 커서 이후 마지막 행까지 삭제
. : 이전 명령 반복
u : 이전 명령 취소(계속 취소 가능)
U : 버퍼에 현재 행 복사(= Y = yy)
Y : 버퍼에 현재 행 복사
yy : 버퍼에 현재 행 복사
5Y : 현재행부터 5행 복사
p : 현재 커서 아랫줄에 버퍼 내용 복사(삽입)
P : 현재 커서의 윗줄에 복사
J : 두 행(현재 행과 다음 행)을 결합(junk)
3J : 현재행부터 3행을 결합
>> : 현재 행을 오른쪽으로 tab만큼 이동(shift)
3>> : 현재부터 3행을 tab만큼 shift
<< : 현재 행을 왼쪽으로 tab만큼 shift
Ctrl-d : 반 화면 아래로(down)
Ctrl-u : 반 화면 위로(up)
Ctrl-f : 한 화면 아래로(foreward)
Ctrl-b : 한 화면 위로(backward)
3Ctrl-b : 3 화면 위로. 위 네 가지 모두 앞에 숫자쓰면 같은 의미
ZZ : 저장 후 빠져나감 (ZZ = :x = :wq)
r : 한 문자 교체(교체 후 입력모드가 아닌 명령모드)
3r : 세 문자를 같은 한 문자로 교체
~ : 대소문자 변경
3~ : 3문자에 대한 대소문자 변경
3. Insert Mode (입력 모드)
i : 커서 앞에서 입력
a : 커서 다음에서 입력
I : 행의 처음에서 입력
A : 행의 끝에서 입력
5i : 커서 앞에서 5회 반복 입력
3a : 커서 다음에서 3회 반복 입력
5I : 행의 처음에서 5회 반복 입력
3A : 행의 끝에서 3회 반복 입력
o : 아래 행에서 입력
O : 윗행에서 입력
s : 한 문자 교체
7s : 7개 문자 교체
S : 현재 행 교체(= cc)
3S : 3행 교체(= 3cc)
C : 현 문자부터 그 행 교체
R : 현 문자부터 그 행을 덮어쓰며 교체
|