본문 바로가기

카테고리 없음

[Linux] VI편집기 명령어 모음

VI 편집기

[1] 시작
vi의 실행은 한글 환경에서 vi를 입력하면 되고, 콘솔모드에서 한글을 다루려면, han을 먼저 입력한 뒤, 
vi를 입력하면 됩니다. 
예) >vi

읽기 전용 열기 
예) >vi R file 
>view file

[2] vi의 세가지 모드
vi명령어는 다음과 같이 입력 모드, 명령 모드, 콜론 모드(ex 모드) 크게 세가지로 분리됩니다.
① 입력 모드 i, a, o, I, A, O를 누른 후 텍스트를 입력할 수 있는 상태 
② 명령 모드(Esc모드) ESC키를 누른 상태 
③ 콜론 모드(Ex모드) ESC키를 누르고, :(콜론)을 입력한 상태

① 입력 모드 다른 편집기에서 타이핑을 하여 파일의 내용을 입력하는 과정 
② 명령 모드 다른 편집기의 편집(Edit) 메뉴에서 제공하는 복사(Copy), 
붙이기(Paste),삭제(Delete) 등의 편집 기능의 활용 
③ 콜론 모드(ex 모드) 다른 편집기의 파일(File) 메뉴에서 수행하는 
열기(Open), 저장 (Save), 다른 이름으로 저장(Save as) 등의 명령 수행

vi는 실행될 때 명령 모드에서 시작하고, 실행을 종료할 때에는 콜론 모드에서 종료 명령을 수행합니다. 
또한 vi는 대문자와 소문자 구분을 확실히 해두어야 한다는 것을 유념합시다.

(1) 입력 모드
i : Insert, 현재 커서의 위치에 글자를 삽입
I : Insert, 커서가 있는 줄(line)의 맨 앞에 글자를 삽입
a : Append, 현재 커서 위치의 다음 칸에 글자를 추가
A : Append, 커서가 있는 줄(line)의 맨 뒤에 글자를 추가
o : Open line, 현재의 줄 다음에 새로운 줄을 삽입
O: Open line, 현재의 줄 앞에 새로운 줄을 삽입
영/한 변환 Shift+Spacebar
(2) 명령 모드
입력 모드에서 명령 모드로 다시 전환하려면 Esc 키를 누르기만 하면 됩니다 
명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 
할 수 있는 상태임을 기억해 두어야 합니다

(3) 콜론 모드 
명령모드에서 콜론 모드로 전환하려면 :명령을 실행시키면 됩니다

편집한 데이터를 저장하고 종료하려면 
:wq

저장하지 않고, 강제로 종료하려면 
:q!

vi를 끝내지 않고, 현재 작업 중인 내용을 저장만 하려면 
:w


[4] vi명령어의 간단한 문법
(반복횟수)(편집명령)(반복횟수)(커서이동명령) 
현재의 위치에서, 커서이동명령의 내용순서대로, 문서의 임의위치로 이동하는 순간, 
편집명령어의 내용이 수행됩니다.

[5] 정규표현식의 특수 기호들
. : 한글자를 대표하는 기호 (dos 의 ? 와 동일)
* : 여러개의 문자를 동시에 대표하는 기호
^ : 줄의 처음시작
$ : 줄의 맨끝
% : 처음줄부터 끝줄까지
: 특수한 기호들이 가지는 뜻을 없앨때 사용
< : 단어의 시작과 대응합니다
> : 단어의 끝과 대응합니다
[^] : 묶여진 문자를 제외한 아무것이나 대응합니다
: 이어지는 기호를 문자 그대로 해석합니다
[ ] : 일정한 제한을 두어 글자를 대표하고자 하는 기호
[az] : a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 를 대표
[AZ] : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표
[AB] : A 또는 B
p[aeiou]t : pat, pet, pit, pot, put 를 대표
[09] : 0,1,2,3,4,5,6,7,8,9 를 대표
6] 명령 모드(ESC 모드)에서 사용되는 몇가지 기호
다음과 같은 기호는 기본적인 것으로 필수적으로 알아두시기 바랍니다.
G : 화일의 맨끝으로
^ : 현재줄의 맨앞 (빈칸무시)으로
0 : 현재줄의 맨앞으로
$ : 현재줄의 맨 뒤로
% : 짝을 이루는 기호 확인
w : 다음 단어로
b : 이전 단어로
e : 현재 단어의 끝 글자

[7] 커서 움직이기
명령모드 상태에서 커서를 마음대로 움직일 수 있습니다.
① 글자 단위 이동
h : 커서를 한칸 왼쪽으로 이동하는 명령
j : 커서를 한줄 아래로 이동하는 명령
k : 커서를 한줄 위로 이동하는 명령
l : 커서를 한칸 오른쪽으로 이동하는 명령
Backspace : 커서를 한칸 왼쪽으로 이동하는 명령
Space : 커서를 한칸 오른쪽으로 이동하는 명령

② 줄 단위 이동 
^ : 빈칸을 무시하고, 커서를 현재 줄의 첫글자로 이동하는 명령

0 : 커서를 현재줄의 처음으로 이동하는 명령
$ : 커서를 현재줄의 맨끝으로 이동하는 명령
% : 짝을 이루는 기호 확인하기
+ : 커서를 다음줄의 처음으로 이동하는 명령
: 커서를 이전 줄의 처음으로 이동하는 명령
Return : 커서를 다음줄의 처음으로 이동하는 명령
n| : 현재줄의 n 번째 열로 (n은 임의의 숫자)
H(Home) : 커서를 화면상에 처음줄로 이동하는 명령
M(Middle) : 커서를 화면상에 중간줄로 이동하는 명령
L(Last) : 커서를 화면상의 마지막줄로 이동하는 명령
nH : 화면상의 처음줄로부터 n 줄 밑으로 이동(n은 임의의 숫자)
nL : 화면상의 마지막줄로부터 n 줄 위로(n은 임의의 숫자)
g(Go) : 파일의 마지막 줄로 이동하는 명령
nG : n번째 줄로 건너뛰는 명령
gg : 맨 첫줄로
ngg : n 번째줄로
n : n 번째줄로

③ 단어 단위 이동 
w(word) : 커서를 다음단어의 첫글자로 이동하는 명령

b(back) : 커서를 이전단어의 첫글자로 이동하는 명령
e(end) : 커서를 다음단어의 끝 글자로 이동하는 명령
E : ?, ! 등 구두점을 무시하고, 현재 단어의 끝으로 이동
) : 다음 문장의 시작으로 이동하는 명령
( : 이전 문장의 시작으로 이동하는 명령
} : 다음 문단의 시작으로 이동하는 명령
{ : 이전 문단의 시작으로 이동하는 명령
]] : 다음 섹션의 시작으로 이동하는 명령
[[ : 이전 섹션의 시작으로 이동하는 명령

④ 화면단위 이동
vi에는 스크롤 기능이 없는 대신 화면 단위로 이동하는 명령어들이 있습니다.
Control + F (Forward) : 한화면 밑으로 이동
Control + B (Backward) : 한화면 위로 이동
Control + D (Down) : 반쪽화면 밑으로 이동
Control + U (Upon) : 반쪽화면 위로 이동
Control + E : 커서는 현재위치 그대로 화면만 한줄씩 위로 이동
Control + Y : 커서는 현재위치 그대로 화면만 한줄씩 아래로 이동
z : 커서의 위치와 함께, 화면상의 맨위로
nz : n번 라인을 화면상의 맨위로
z. : 커서의 위치와 함께, 화면상의 중간으로
z : 커서의 위치와 함께, 화면상의 맨아래로

※ 
Control + G : 현재 편집하고 있는 문서의 상태를 알 수있다

Control + L : 화면 재표시 (글자가 깨졌을 경우; 윈도의 F5와 비슷)
Control + R(edraw) : 화면 재표시 (글자가 깨졌을경우)

[8] 편집하기
① 복사, 붙이기, 합치기
y (Yank) : 복사하기
yy : 한 줄 전체의 내용을 복사한다
2yy : 두줄복사
nyy : 현재 줄 이하로 n개의 줄을 복사한다 (n은 임의의 숫자, 2yy는 2줄 복사)
ynw : n개의 단어를 복사한다(y2w는 두 개의 단어를 복사)
yw : 한단어 복사
y2w : 두단어 복사
y$ : 현재 위치에서 그 줄의 끝까지 복사한다
y0(y^) : 현재 위치에서 그 줄의 처음까지 복사한다
yG : 현재 위치에서 파일의 끝까지 복사한다(G는 파일의 마지막 줄)
Y : 한 줄 전체의 내용을 복사한다 (yy 와 동일)
※ 마지막 명령어의 반복 
. : 마지막에 수행한 명령어를 반복한다.

2. : 명령어를 2번 반복한다.
p (Put or Paste) : 붙이기
p : 버퍼에 저장된 내용을 커서의 오른쪽으로 붙여 넣는다.
2p : 아래로(오른쪽으로) 두번 붙이기
np : n번만큼 p 명령을 반복. 2p라면 버퍼의 내용을 두 번 붙여넣는다
P : 위로(왼쪽으로) 붙이기
2P : 위로(왼쪽으로) 두번 붙이기
nP : 버퍼에 저장된 내용을 커서의 왼쪽으로 붙여넣는다. 사용법은 p와 같다
xp : 두 문자를 바꾸는 명령
deep : 두 단어를 바꾸는 명령
ddp : 두 줄을 바꾸는 명령
J(Join) : 여러 줄의 내용을 한 줄로 합친다
J : 현재줄을 윗줄에 붙인다. (두줄 합치기)
nJ : n개의 줄을 합쳐 한 줄로 만든다. 커서는 원본 문서의 마지막 줄의 첫번째 위치 
(합쳐진 줄에서는 중간)에 놓인다. 5J는 5줄로 이루어진 내용을 한 줄로 만든다

② 지우기, 복구하기, 바꾸기 dnw : n개의 단어를 지운다
d$ : 커서가 있는 위치에서 그 줄의 끝까지 지우기
D : 커서부터 줄의 끝까지 삭제합니다. (d$ 와 동일)
d (Delete) : 지우기
dd : 현재커서가 위치한 줄의 전체를 삭제합니다.
2dd : 두줄지우기
ndd : n줄지우기 (n 은 임의의숫자)
dw : 한단어 지우기
d2w : 두단어 지우기
d0(d^) : 그줄 처음까지 지우기
dG : 커서가위치한 곳으로 부터 문서 끝까지 지우기
d move : 커서가 위치한 곳부터 move까지 삭제
dlG : 커서가 위치한 곳으로부터 편집버퍼의 맨앞까지 삭제.
:lined : 지정한 줄을 삭제
:line, lined : 지정한 범위를 삭제
u (Undo) : 되살리기 명령으로 버퍼에 저장되어 있는 원래의 내용을 복구
u : 한번복구하기
'nu' : (n은 임의의 숫자) 형식으로 사용하며, n 단계까지의 명령을 복구할 수 있다
2u : 두번복구하기
c (Change) : 바꾸기
cc : 한줄 바꾸기
2cc : 두줄 바꾸기
ncc : n개의 줄 바꾸기(n은 임의의 숫자)
cw : 한단어 바꾸기
ce : 공백을 제외하고 한단어를 바꾸기
c2w : 두단어 바꾸기
c$ : 그 줄 끝까지 바꾸기
c0(c^) : 현재 위치에서 파일의 끝까지 바꾼다
c : 그 줄 끝까지 바꾸기 (c$)와 동일
cmove : 커서부터 move까지 변경
r (Replace) : 한글자 바꾸기
2r : 두글자 바꾸기

※ r 명령어는 insert 모드로 바뀌지 않는다.
R : 바꾸면서 삽입이 아닌 수정(modify) 모드로 들어간다. 윈도에서 Insert 키를 누르고 
수정 상태로 들어가는 것과 같다

s : 한글자 지우고 insert 모드로 cl 와 동일
S : 한줄지우고 insert 모드로 cc 와 동일
~ : 대문자 < > 소문자 바꾸기 영문자에만 해당
※ 지우기와 바꾸기의 차이점은 바꾸기는 명령어 후에 vi 편집모드로 바뀐다.
[9] 찾기
/요 : 현재 위치에서 아래쪽 방향으로 '요'라는 단어를 찾는다
?요 : 현재 위치에서 위쪽 방향으로 '요'라는 단어를 찾는다
/ : 단어 찾기를 반복한다(웨에서 아래쪽 방향으로)
n : 단어 찾기를 반복한다(아래쪽 방향으로)
? : 단어 찾기를 반복한다 (아래족에서 위쪽 방향으로)
N : 단어 찾기를 반복한다 (위쪽 방향으로)
fx : 현재줄에서 x문자 찾기 x 는 한개의 글자
Fx : 현재줄에서 반대방향으로 x문자 찾기 x 는 한개의 글자
tx : 현재줄에서 x문자를 찾아서 바로전에 커서놓기
Tx : 현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기
; : 현재 줄에서 글자 찾기를 반복한다(뒤로)
' : 현재 줄에서 글자 찾기를 반복한다(앞으로)