vi 편집기 사용법
Unix/Linux 2013. 3. 14. 15:54탭 간격 같은 환경 변수를 설정하기 위해서는
# vi ~/.exrc
에 설정값들을 저장해 놓는다.
ex) set tabstop=4
set ai
(1) 사용법
vi [option] [filename]
(2) option
-c : -c옵션은 시작하면서 어떠한 명령을 실행한다.
-r : 손상된 파일을 복구할 때 쓴다. 파일을 편집하던 중 갑작스런 사고 등으로 인해 시스템이 다운되었을 경우 대개 이 명령으로 복구 할 수 있다.
+n : 파일을 열면서 n번째 줄로 커서를 이동시킨다.
+ : 파일을 열면서 마지막 줄에 커서를 이동시킨다.
-wn : 기본적인 윈도우 크기를 n라인으로 한다.(기본값은 20라인)
(3) 사용예
1) vi
=> 빈문서로 시작한다.
2) vi index.html
=> 주어진 파일(index.html) 이름으로 편집을 시작한다. 만약 파일이 존재하지 않으면 새로 만들게 된다.
3) vi +15 index.html
=> index.html 파일을 열면서 커서를 15번째 줄로 보낸다.
4) vi -c 15 index.html
=> -c옵션은 시작하면서 어떠한 명령을 실행하라는 뜻이다. 따라서, -c 15 라고 쓰면 +15 옵션과 동일한 결과를 얻는다.
5) view index.html
=> index.html파일을 읽기 전용으로 파일을 연다. 참고로 저장할 때 ':wq!'형식으로 ! 표를 붙이면 읽기전용이라도 저장된다
6) vi + index.html
=> index.html파일을 열면서 커서의 위치를 마지막라인에 둔다.
7) vi +/posein /etc/passwd
=> /etc/passwd 라는 파일을 열면서 posein이라는 문자열이 있는 위치에 커서를 둔다.
3. vi 종료하기
(1) 설명: 모드에 대한 설명이 아래에 나오지만 미리 종료에 대해 설명하면 일단 [ESC]키를 눌러 명령모드로 전환한 후, 필요에 맞게 다음 중 하나의 키워드를 사용하면 된다.
(2) 명령
:wq => 파일을 저장한 후 종료한다. 같은 명령으로는 ZZ 또는 :x 가 있다.
:q! => 편집하여 변경된 내용을 저장하지 않고 강제 종료한다.
:q => 편집중인 내용이 없는 경우, vi를 종료한다.
:w => 편집중인 파일 내용을 저장한다. vi는 종료하지 않는다.
4. vi편집기의 모드
(1) 설명: vi편집기에는 크게 2가지모드로 구분된다. 첫번째는 명령모드(command mode)이고, 두번째는 입력모드(input mode)또는 편집모드라고 한다. 또 명령모드는 다시 일반명령모드와 ex명령모드로 구분된다. 명령모드상태에서 입력명령(i,I,a,A,o,O)을 실행하면 입력모드로 전환된다. 입력모드에서 타이핑한 문자들이 문서에 삽입된다. 여기에서 다시 [ESC]키를 누르면 명령모드로 돌아온다. 명령 모드에서 ':'를 입력하면 화면 아래쪽에 ':'라는 프롬프트가 나타나게 되는 데 이것이 ex명령모드이다.
참고)입력모드 키워드가 위 나열한 것외에 (c,C,s,S,R)등이 있다.
(2) 모드
1) 명령모드 : vi라고 입력한뒤 처음 접하는 모드
ㄱ. 커서 이동 명령
h : 왼쪽으로 이동
j : 아래로 이동
k : 위로 이동
l : 오른쪽으로 이동
w : 다음 단어의 처음으로 이동
- : 앞 라인의 첫문자로 이동
^ : 라인의 첫 문자로 이동
$ : 라인의 맨 끝으로 이동
+ : 다음 라인의 첫문자로 이동
0(zero) : 첫번째 열로 이동
G : 제일 끝줄로 이동
nG : n번째 행으로 이동
gg : 파일의 처음으로 이동
( : 문장의 처음으로 이동
) : 다음 문장의 처음으로 이동
{ : 문단(paragraph)의 처음으로 이동
} : 다음 문단의 처음으로 이동
H : 화면의 첫 라인으로 이동
M : 화면의 중간으로 이동
L : 화면의 끝라인으로 이동
ctrl+b(back) : 한 화면 위로 이동
ctrl+f(forward) : 한 화면 아래로 이동
ctrl+u(up) : 반 화면 위로 이동
ctrl+d(down) : 반 화면 아래로 이동
e : 한 단어 뒤로 이동
b : 한 단어 앞으로 이동
:0(zero) : 줄의 제일 처음으로 이동
:$ : 줄의 제일 끝으로 이동
ㄴ. 편집상태로 진입 : 입력모드로 전환하는 키워드이고 하단에 'INSERT' 등과 같은 문자열이
표시된다.
i : 현재 커서 위치에 삽입
a : 현재 커서 위치 다음에 삽입
o : 현재 커서가 위치한 줄의 아랫줄에 삽입
I : 현재 커서가 위치한 줄의 제일 앞에 삽입
A : 현재 커서가 위치한 줄의 제일 뒤에 삽입
O : 현재 커서가 위치한 줄 위에 삽입
ESC : 명령모드로 재전환
ㄷ. 복사하기와 붙이기
Y : 현재 커서가 위치한 줄을 버퍼에 복사한다.
yy : Y와 같다.
yw : 현재 커서가 위치한 단어를 버퍼에 복사한다.
'n'Y : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 버퍼에 복사한다.
'n'yy : nY와 같다.
'n'yw : 현재 커서가 위치한 단어로 부터 뒤로 n개의 단어를 버퍼에 복사한다.
yh : 커서의 왼쪽 문자를 복사한다.
yl : 커서가 위치한 문자를 복사한다.
yB : 커서의 왼쪽 비공백 단어를 복사한다.
yW : 커서의 오른쪽 비공백 단어를 복사한다.
y0 : 커서 왼쪽부터 라인의 처음까지 복사한다.
p : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.
P : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.
ㄹ. 지우기
x : 현재 커서 위치의 문자를 지운다.(dh와 동일)
X : 커서 왼쪽의 문자를 지운다.(dl과 동일)
dd : 현재 커서가 위치한 줄을 지운다. (단어 뒤의 스페이스 포함)
'n'dd : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 지운다.
dw : 현재 커서가 위치한 단어를 지운다.
db : 현재 커서의 왼쪽 단어를 지운다.
'n'dw : 현재 커서가 위치한 단어로 부터 뒤로 n개 만큼의 단어를 지운다.
dB : 현재 커서 왼쪽 비공백 단어를 지운다.
dW : 현재 커서 오른쪽 비공백 단어를 지운다.
d$ : 현재 커서가 있는 라인부터 끝까지 지운다.(D와 동일)
- d0 : 커서 왼쪽부터 라인의 처음까지 지운다.
ㅁ. 바꾸기
r : 현재 위치의 문자를 바꾼다.
R : 현재 커서 위치부터 원하는 만큼 다른 문자로 바꾼다.
cb : 현재 커서 왼쪽 단어를 바꾼다.
cw : 현재 위치의 단어를 바꾼다.
cc : 현재 커서가 위치한 줄을 바꾼다.
c$ : 커서부터 라인의 끝까지 바꾼다.(C와 동일)
c0 : 커서 왼쪽부터 라인의 처음까지 바꾼다.
C : 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.
'n'cw : 현재 위치로부터 'n'개의 단어를 바꾼다.
'n'cc : 현재 위치로부터 'n'개의 줄을 바꾼다.
ㅂ. 기타
ctrl+g : 현재 편집하고 있는 파일의 정보를 보여준다.
shift+v : 블록을 지정한다.
u : 방금 한 명령을 취소한다.
U : 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.
. : 방금한 명령을 되풀이 한다.
'n'. : 방금한 명령을 n번만큼 되풀이 한다.
J : 현재 줄과 다음 줄을 합한다.
ZZ :현재 내용을 저장하고 끝낸다.
/exp : 'exp'와 같은 내용을 현재 위치 다음부터 찾는다.
?exp : 'exp'와 같은 내용을 현재 위치부터 위쪽으로 찾는다.
n : 앞에서 찾은 내용을 현재 위치 다음부터 찾는다.
N : 앞에서 찾은 내용을 반대 방향으로 계속 찾는다.
>> : 현재 커서 위치 줄을 오른쪽으로 한 열씩 이동한다.
<< : 현재 커서 위치 줄을 왼쪽으로 한 열씩 이동한다.
~ : 현재 커서가 위치한 문자의 대소문자를 서로 변환한다.
ctrl+l : 화면 다시 그린다.
! : vi편집중에 shell명령을 내린다.
3) ex명령모드 : ex란 초기 유닉스에서부터 쓰이던 line editor이다. vi는 자체 명령어외에
ex편집기 명령어를 지원한다. 명령모드에서 ':'누르면 화면 아래쪽에 ':'라는
프롬프트가 나타나면서 ex명령모드로 들어간다.
ㄱ. 명령
:w => 현재 내용을 저장한다.
:w filename => 현재 내용을 지정된 파일 이름으로 저장한다.
:w! => 강제로 덮어쓰기를 한다.
:q => 그냥 종료한다. 약간이라도 변경사항이 있으면 종료안된다.
:wq => 현재 내용을 저장하고 종료한다.
:wq filename => filename 으로 저장하고 종료한다. 새이름으로 저장할 때 쓴다.
:q! => 현재 내용을 저장하지 않고 종료한다.
:e filename => 새로운 파일을 편집한다.
:r filename => 현재 커서 위치 다음에 파일을 읽어 삽입한다.
:14 r filename => 14행 이후에 파일을 읽어 삽입한다.
:10 => 10번째 줄로 커서를 이동시킨다.
:10, 20d => 10번째 행에서 20번째 행까지지운다.
(참고) 줄 번호를 쓸 때 '.'는 현재 줄을, '$'는 끝줄을 의미하므로 ':3,$d'는 3번째행에서
끝행까지 지운다는 의미가 된다. 또 첫줄부터 현재 커서가 위치한 줄까지를 지우려면
':1,.d'라고 쓰면 된다.
ㄴ. 문자열의 치환
:s/문자열/새문자열 => 커서가 위치하고 있는 줄의 첫번째 해당문자열을 새문자열로
치환한다.
:s/문자열/새문자열/g => 커서가 위치하고 있는 줄의 모든 해당문자열을 새 문자열로 치
환한다.
:1,$ s/문자열/새문자열/g => 파일 전체에 대해 해당문자열을 새문자열로 치환한다.
:%s/문자열/새문자열/g 와 같다.
5. vi편집기의 환경설정
(1) 설명 : vi환경설정을 위해서는 명령모드에서 :set을 사용한다.
(2) 사용법
1)설정
set [환경변수][=값]
2) 해제
set no환경변수
(3) 환경변수
1) ignorecase : 문자열을 검색할 때 대소문자에 관계없이 검색한다.
2) number : 행의 앞에 행번호를 붙여준다. 약자로 'nu'라고 해도 된다.
3) autoindent : 라인변경시 커서의 위치를 바로 위라인의 수준과 같이 해준다. 프로그램작성시에 용이하다. 약자로 'ai'라고 해도 된다.
4) showmatch : '}'또는 ')'를 입력하였을 경우 짝이되는 '{','('를 찾아 커서가 1초동안 머무르다 돌아온다. 이 기능은 C등의 프로그램을 작성할 때 편리하다. 약자로 'sm'이라고 해도 된다.
5) showmode : 화면 아래쪽에 현재 모드를 표시한다. 즉 편집모드인 경우에 'INSERT'등의 값으로 표시해준다. 기본값으로 설정되어 있다.
6) tabstop : 탭의크기를 표시한다. '=n'를 붙이면 탭의크기를 n값에 따라 부여할 수 있다.
(4) 사용예
1) :set
=> 여러가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경변수를 보여준다.
2) :set nu
=> 행의 앞에 행번호를 표시한다. ':set number'와 같다.
3) :set nonu
=> 행의 앞에 붙은 행번호 표시를 없앤다.
4) :set ai
=> [Enter]키를 입력하면 행을 바꾸었을 경우 위 줄과 같은 열에 커서를 위치시킨다.
5) :set noai
=> 'ai'설정을 해제한다. ':set noautoindent'와 같다.
6) :set ignorecase
=> 명령모드에서 문자열을 검색시에 대소문자를 구분하지 않는다. 즉 '/linux'라고 입력하면
linux, Linux, LINUX 등의 모든 문자열을 찾아준다.
7) :set noignorecase
=> 검색시에 대소문자를 구분하도록 한다.
8) :set tabstop
=> 현재 설정된 탭의 크기(기본값은 4)를 보여준다.
9) :set tabstop=8
=>탭의 크기를 10으로 바꾼다.
10) :set noshowmode
=> 리눅스에서는 기본적으로 모드를 표시해준다. 즉 입력모드인 경우에는 화면하단에INSERT 등을 표시해준다. 위와 같이 명령을 내리면 모드전환을 해도 표시해주지 않는다.
(5) 관련파일 : .exrc
1) 설명: set명령을 사용자의 홈 디렉토리의 .exrc(또는 .vimrc)안에 써 놓으면 vi가 시작될 때 디폴트로 설정되어 시작하게 된다.
2) 사용법
set [환경변수] [값]
3) 사용예
[posein@www posein]$ cat .exrc
set nu
set ai
=> vi편집기 실행할 때마다 각 행 앞에 행번호를 붙여주고 autoindent를 적용한다. ':'는 적지 않는다.
'Unix/Linux' 카테고리의 다른 글
tgz 압축/푸는 법 (0) | 2014.02.27 |
---|---|
.svn 파일 삭제하는법 (0) | 2014.02.27 |
Linux에서 getch() 구현 (0) | 2013.03.15 |
Linux에서 _kbhit() 구현 (0) | 2013.03.15 |
^M 문자 (0) | 2013.03.14 |