VI 편집기 1

Tip 2006/08/17 18:37

vi 편집기란 터미널 모드에서 편집을 할 수 있겠끔 해주는 일종에 에디팅 툴입니다.

윈도우, 윈도우용 에디터(예: 윈도우즈의경우 워드나 아래아 한글, 노트패드 등)가 없는 상태에서 텍스트 파일을 편집하기란 쉽지 않겠죠 ?

유닉스에서는 기본적으로 텍스트 파일을 에디팅 할 수 있도록 해주는 툴로 vi 편집기를 지원합니다.


에디터 사용법

리눅스는 기본적으로 콘솔 환경에서 대부분의 작업을 처리하기 때문에 에디터를 잘 사용하는 것이 무엇보다 중요하다. 에디터의 종류에는 여러 가지가 있지만 프로그래머들이 선호하는 에디터는 크게 vi와 emacs이다


1. vi 에디터

- vi는 텍스트 문서를 편집하는데 사용되는 텍스트 편집기이다. 여러 종류의 OS 상에서 동작하는 vi가 개발되어 있으며, 특히 unix 계열의 OS에서는 거의 모든 시스템에서 기본 텍스트 에디터로 사용되고 있다.

- vim은 Vi IMproved로써 말 그대로 vi에 unlimited undo, syntax coloring, split windows, visual selection, gui support 등의 기능이 보강된 vi clone이다.


2. 기본적인 편집 명령

- 명령모드 : 키입력이 바로 명령이 되는 모드로서 쓴 내용을 삭제하거나, 복사할 때 사용

- 입력모드 : 실제 문서를 편집하는 모드

- ex모드 : 고전 에디터는 'ex' 명령을 실행할 수 있는 모드로서 몇 가지 편집을 할 수 있다.

[vi 상태 천이도]

- vi를 실행시키면 처음에는 명령 모드 상태에 있게 된다.

- 명령 모드에서 ':' 키를 누르면 ex 모드로 변환된다.

- 'a', 'i' 등의 키를 누르면 입력모드로 전환된다.

- 특정 파일을 편집하기 위해 열려면 vi [filename]을 shell prompt에서 실행시킨다.

- 이렇게 연 파일을 편집모드로 들어가 편집하려면 'i'를 입력한다.

- 종료하려면 'ESC' 키를 눌러서 명령 모드로 전환한다.

- 'ZZ'나 ':wq'를 누르면 저장하고 나오고 ':q!'를 누르면 저장하지 않고 나온다.

- 명령 모드에서 'u' 즉' undo 명령으로서 잘못된 명령을 바로 되돌릴(undo)할 수 있다.

3. 명령어 모드별 단축키

(1) 시작

vi file
vi를 시작하여 지정한 파일 편집
vi -R file
읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file
읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

(2) 종료

:wq
데이터를 저장하고 종료
:q!
데이터를 저장하지 않고 종료

(3) 삽입

i
입력 모드로 전환, 커서 위치 앞에서 삽입
A
입력 모드로 전환, 현재 줄의 끝에 삽입
a
입력 모드로 전환, 커서 위치 뒤에서 삽입
o
입력 모드로 전환, 현재 줄의 아래에 전개
l
입력 모드로 전환, 현재 줄의 앞에 삽입
O
모드로 전환, 현재 줄의 위에 전개

(4) 커서이동

h<Left>
커서를 한 칸 왼쪽으로 이동
w
커서를 다음 단어 첫 글자로 이동
j<Down>
커서를 한 줄 아래로 이동
e
커서를 다음 단어의 끝 글자로 이동
k<Up>
커서를 한 줄 위로 이동
b
커서를 이전 단어의 첫 글자로 이동
l<Right>
커서를 한 칸 오른쪽으로 이동
W
w와 같음(문장 부호 무시)
<Backspace>
커서를 한 칸 왼쪽으로 이동
E
e와 같음(문장 부호 무시)
<Space>
커서를 한 칸 오른쪽으로 이동
B
b와 같음(문장 부호 무시)
-
커서를 이전 줄의 처음으로 이동
(
다음 문장의 처음으로 이동
+
커서를 다음 줄의 처음으로 이동
)
이전 문장의 처음으로 이동
<Return>
커서를 다음 줄의 처음으로 이동
{
다음 문단의 처음으로 이동
0
커서를 현재 줄의 맨 앞으로 이동
}
이전 문단의 처음으로 이동
$
커서를 현재 줄의 맨 끝으로 이동
H
커서를 화면 맨 위로 이동
^
커서를 현재 줄의 첫글자 (공백이나 탭이 아닌)로 이동
M
커서를 중간으로 이동
L
커서를 맨 아래로 이동

(5)문자 삭제

x
커서가 있는 문자 삭제
dg
커서부터 편집 버퍼 끝까지 삭제
X
커서의 왼쪽 문자 삭제
d1G
커서부터 편집 버퍼 맨 앞까지 삭제
D
커서부터 줄의 끝까지 삭제
:lined
지정한 줄의 삭제
dd
현재 줄의 전체 삭제
:line
lined
지정한 범위의 삭제
dmove
커서부터 move까지 삭제

(6) 데이터 저장하기

:w 원래의 파일로 데이터를 저장 :w>>file 지정한 파일에 데이터를 추가
:w file 지정한 파일로 데이터를 저장

(7) 디스플레이 제어하기

^L 현재 화면을 다시 디스플레이하기
:set number내부 줄 번호 디스플레이
:set nonumber배부 줄 번호 디스플레이 않기

(8) 마지막으로 지운 것 복사하기

p마지막으로 지워진 것을 커서의 뒤/아래에 삽입
P마지막으로 지워진 것을 커서의 앞/위에 삽입
xp두 문자를 바꿈
deep두 단어를 바꿈
ddp두 줄을 바꿈

(9) 시스템이 다운된 후 되살리기


vi -r되살릴 수 있는 모든 파일 이름 보여주기
vi -r file vi를 시작하여 지정한 파일 되살리기

(10) 내용 고치기

r 단지 한 글자만 변경(입력 모드로 바뀌지 않음) C커서의 위치로부터 줄 끝까지 삽입에 의한 변경
R 입력하는 대로 겹쳐 써서 변경 s삽입에 의해 한 단어의 변경
cc전체 줄을 삽입에 의한 변경 S전체 줄을 삽입에 의한 변경
cmove커서부터 move까지 삽입에 의해 변경 ~대,소문자 바꾸기

(11) 고치기의 취소 또는 반복

u 편집 버퍼를 수정했던 마지막 명령을 취소
U 현재 줄을 저장
. 편집 버퍼를 수정했던 마지막 명령 반복



ls 명령어 :  ls 는 파일의 목록을 보는 명령어이다. 이 명령어에는 많은 옵션이 있으며 여기에서는 가장 많이 사용되는 몇 가지만 알아보도록 한다.

$ ls <옵션>

F : 파일 유형을 나타내는 기호를 파일명 끝에 표시한다
l : 파일에 관한 상세 정보를 나타낸다.
a : dot 파일(.access 등)을 포함한 모든 파일을 나타낸다.
t : 파일이 생성된 시간별로 나타낸다.

cat 명령어 : 파일의 내용을 화면에 출력한다.

$ cat 파일이름

mv 명령어 : 파일의 위치를 옮기거나 이름을 바꿀 경우 사용된다.

이름 변경 : $ mv old_name new_name
파일의 위치변경 : $ mv file ../main/new_file

cp 명령어 : 파일을 복사한다

$ cp file_a file_b (file_a을 file_b이란 이름으로 복사한다)
$ cp file_1 ../main/file_b (file_1을 ../main/file_b이란 이름으로 복사한다)

more 명령어 cat 명령어는 실행을 시키면 한 화면을 넘기는 파일일 경우 그 내용을 모두 볼 수가 없다. 하지만 more 명령어를 사용하면 한 화면 단위로 보여줄 수 있어 유용하게 사용된다.

Space bar : 다음 페이지
Return(enter) key : 다음 줄
v : vi 편집기로 전환
/str : str 문자를 찾음
b : 이전 페이지
q : more 상태를 빠져나감
h : 도움말
= : 현재 line number를 보여줌

chmod 명령어 : 사용자에 대한 파일의 접근을 제한하는데 사용된다.

$ chmod 755 file_name

rm 명령어 : 파일을 삭제한다.

$ rm <파일이름> (파일을 삭제한다)
$ rm -r <디렉토리> (디렉토리 전체를 삭제한다)
$ rm -i a.* (a로 시작하는 모든 파일을 일일이 삭제할 것인지 확인하면서 삭제)

mkdir 명령어 : 디렉토리를 만든다.

$ mkdir <디렉토리이름>

pwd 명령어 : 현재 자신의 작업 디렉토리를 보여준다.

$ pwd    /home/httpd/html/ec01

who 명령어 : 현재 시스템에 login 하고 있는 사용자의 리스트를 보여준다.

$ who

whereis 명령어 : 소스, 실행파일, 메뉴얼 등의 위치를 알려줌

$ whereis perl (perl의 위치를 알려준다)

새로운 파일을 만드는 방법

$ vi newfile (vi 편집기 상태로 들어감)
$ touch newfile (빈 파일만 생성됨)
$ cat > newfile (vi 편집기 상태로 들어감, 문서 작성후 Ctrl+D로 빠져나옴)

파일 내용만 보기

$ cat filename (파일의 내용을 모두 보여줌)
$ head -n filename (n줄 만큼 위세서부터 보여줌)
$ tail -n filename (n줄 만큼 아래에서부터 보여줌)

파일 (디렉토리) 압축 하고 풀어보기

압축파일풀기 : tar -xvf FILE_NAME.tar
압축하기 : tar -cvf FILE_NAME.tar 압축할파일명 혹은 디렉토리명


VI 문서 편집기 사용하기

VI 프로그램의 위치

$ which vi

/usr/bin/vi
/usr/ucb/vi
/bin/vi

VI를 이용한 화일 열기

# vi
: e test.txt

# vi test.txt

========= 명령모드 ==========================================


편집모드

i - 커서앞에 텍스트 삽입
a - 커서뒤에 텍스트 삽입
o - 현재 행 아래에 텍스트 삽입

텍스트 교체

r - 한 글자만 교체
R - 커서가 있는 자리부터 여러문자 교체

커서이동

←, h, <del>
↓, j
↑, k
→, l

신속이동

w - 오른쪽으로 특수문자 혹은 한단어의 처음으로 이동
b - 왼쪽으로 특수문자 혹은 한단어의 처음으로 이동
W - 오른쪽으로 한단어의 처음으로 이동
B - 왼쪽으로 한단어의 처음으로 이동

한 행 안에서의 이동

0 (숫자) - 행의 맨 처음으로 이동
$ - 행의 맨 마지막으로 이동

페이지 이동

G - 문서의 맨 끝 행으로 이동
nG - nqjsWo 행으로 이동
C-f - 한페이지 아래로 이동
C-b - 한페이지 위로 이동

삭제명령

dw - 한 단어 삭제
dd - 한 줄 삭제
D - 커서부터 행 끝까지 삭제
x - 한 글자 삭제

숫자와 명령의 조합 예제

10j - 10줄 위로 이동
10x - 10글자 삭제
5dd - 5줄 삭제

복사 & 붙여넣기

x, dw, dd, D → p - 커서 뒤에 임시 버퍼내용 추가
x, dw, dd, D → P - 커서 앞에 임시 버퍼내용 추가

텍스트 복사

yw - 한단어 복사
y$ - 커서부터 행끝까지 복사
yy - 한줄 모두 복사

텍스트 탐색

/ - 전방 탐색
? - 후방 탐색
n - 같은방향으로 탐색 계속
N - 반대방향 탐색 계속
/  - 전방탐색 계속
?  - 후방탐색 계속

행 번호 붙이기

:set nu
:set nonu - 번호 없애기

특정 행 번호로 이동

:1 - 1번째 행으로 이동
:$ - 마지막 행으로 이동
:$= - 현재 문서의 총 줄(행)수
:.= - 현재위치의 행번호

범위 지정

v

:1,10d - 1번행부터 10번행가지 삭제(d)
:.,$d - 현재부터 마지막 행까지 삭제
:0,$-4d - 파일의 맨처음(0- 가상번호)부터 끝까지 삭제하되 4는 제외
:.-1,.+1y(:.-,.+y)(:-,+y) - 현재 행을 기준으로 아래위 3행을 복사
:0,$y - :%y - 모든 행 복사

일부분 저장

:1,.w part1.txt - 1행부터 현재 행까지 part1.txt 라는 이름으로 저장
:1,.w >>part.txt - 1행부터 현재 행까지를 part.txt 파일에 추가

다른파일 내용 (읽기) 삽입

:r insert.txt - 커서위치 아래에 insert.txt  파일을 추가
1r insert.txt -
0r insert.txt -

텍스트 검색 및 교체

:범위s/찾는문자열/교체할문자열/옵션
:%s/girl/woman/g (※ g - global)
:0,.s/^/>> /g - 맨 처음부터 현재행에 대하여 행의 맨 앞에 >>를 붙임 (※ ^ 는 가상의 맨 앞)
:.-3,.+5s/$/<</g - 주어진 범위의 각 행 끝에 << 문자 추가 (※ $는 가상의 맨 마지막)

※ . - 현재 행 ^ - 가상의 맨 처음 $ - 가상의 맨 처음 % 현 문서 전체

텍스트 검색 및 치환

/찾는문자열
- 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(아래방향으로)
?찾는문자열
- 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(위로 향하여)
n
- "/찾는문자열"을 입력후 다음찾기할때(아래방향)
N
- "/찾는문자열"을 입력후 다음찾기할때(위방향)

:s/찾는문자열/치환문자열
- 현재 커서가 놓여 있는 행에서 첫번째로 검색된 특정문자열 바꾸기:1,10s/찾는문자열/치환문자열
- 1행부터 10행사이에 걸쳐 첫번째로 검색된 특정문자열 바꾸기
:%s/찾는문자열/치환문자열
- 모든행에 걸쳐 첫번째로 검색된 특정문자열을 바꾸기

특수문자가 들어간 문자열의 교체

:%s/\/usr/\/usr/local/g - /usr를 찾아서 /usr/local 로 교체
※ \ (역 슬래쉬) 특수문자(/)의 해석방지

외부 유닉스 명령어 실행

:!명령
:sh -
:r :ls - 유닉스 명령의 실행 결과 화면을 현재 편집중인 내용에 불러들임

필터와 명령

:%!tr [a-z][A-Z] - 전체 텍스트의 영문자를 대문자로 치환
:%!sort - 정렬

========= 명령모드 ==========================================

명령모드에서 벗어나 편집모드로 진입하기(입력모드)

i : 커서가 놓여 있는 위치의 문자를 밀어내고 삽입된다.
a : 커서가 놓여 있는 위치의 문자뒤에 삽입된다.
o (소문자 o) : 현재행의 아래행을 밀어내고 입력모드로 전환된다.
O (대문자 O) : 현재행을 한줄 아래로 밀어내고 입력모드로 전환된다.

입력모드 와 삽입모드를 습관적으로 변환하기

입력모드 : ESC - 명령모드(이동,삭제,검색,치환,저장,종료,열기)
명령모드 : i,a,o,O - 삽입모드(입력)

VI 방식의 종료와 저장, 새이름으로 저장

:q - 저장하지 않고 vi 종료하기
:q! - 강제 종료
:w - 현재내용을 저장
:w! - 읽기전용인 파일을 수정후 강제로 저장할때
:wq - 저장하고 종료
:wq! - 읽기전용인 파일을 수정후 강제로 저장하고 종료하기
:w 새파일명 - 새이름으로 저장

VI 환경설정

:set number : 행번호 보이게
:set nonumber : 행번호 안보이게
:set autoindent : 들여쓰기 설정
:set noautoindent : 들여쓰기 제거
:set list : 문단,조판부호 보기
:set nolist : 문단,조판부호 안보이게
:set window=30 : 한 화면당 행의 갯수 30개로 지정
:set ignorecase : 검색시 대소문자 구별 제거
:set noignorecase : 검색시 대소문자 구별
:set all : 현재 설정된 vi 모든 설정값 보기

이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/08/17 18:37 2006/08/17 18:37

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다

댓글을 달아 주세요