노무현 대통령 배너
  김성태의 Tech Tips(Linux, PHP, Apache, DBMS, Mobile)
  http://www.supersky.pe.kr  
안녕하십니까? 김성태입니다.
Linux, Apache, PHP, Mysql, Mobile 관련 Tech Tips 정보를 제공합니다.
 
<<   2007 May   >>
S M T W T F S
293012345
6789101112
13141516171819
20212223242526
272829303112
1606799 159
  
DNS Powered by DNSEver.com
  ++ VI(Visual Editor) 에디터  -  2007/05/18 10:26
■ VI(Visual Editor)
■ VI(Visual Editor)


vi는 1976년 빌 조이가 초기 BSD 릴리즈에 포함될 편집기로 만들었다. 한 줄씩 편집하는 줄단위 편집기가 아니라 한 화면을 편집하는 비주얼 에디터(visual editor)라는 뜻에서 편집기의 이름인 vi가 유래했다. 그래픽 사용자 인터페이스(GUI)가 익숙한 사용자에게는 매우 낯설은 에디터지만 프로그래머 등 텍스트 작업을 주로 하는 사용자에게는 간결한 인터페이스와 키보드를 벗어나지 않고 모든 일을 할 수 있는 막강한 기능으로 크게 환영받고 있다. 파일의 간단한 편집, 전자 우편 쓰기, 복잡한 프로그래밍까지 vi는 유닉스 시스템에 널리 사용되고 있는 편집기이다.




■ VI의 기본개념


vi는 두가지 모드, 즉 명령 모드(Command Mode)와 입력 모드(Input Mode)가 있다. 명령 모드에서는 문서의 삭제·복사·이동 등 여러 가지 편집을 수행하며, 입력 모드에서는 문서를 작성하거나 수정하는 작업을 한다.


vi를 수행하면 명령 모드에서 시작한다. 문서를 작성하기 위해서는 입력 모드 변환 명령을 사용하여 입력 모드로 들어가야 한다. 문서의 입력이 끝나면 [ESC] 키를 사용하여 다시 명령 모드로 돌아온다.


 

Unix(Linux)

Shell

vi filename

명령모드

a A i I o O

입력모드

 

 

ZZ :q :wq :q!

<ESC>





■ VI 의 명령형식


1. [count] command [object]


count - 명령의 반복 횟수 지정

object - 명령의 대상 지정

ex) 8dw - 단어 8개를 삭제



2. ex command


`:` 으로 시작하며 화면 하단에 명령이 표시된다.

ex) :wq - 파일의 내용을 저장하고 vi 를 종료

* vi는 줄단위 편집기인 ex 를 화면단위 편집기로 만든 것이다. 그래서 vi 에서 ex 명령을 모두 사용할 수 있다. `:` 을 누르면 커서가 화면 하단으로 가면서 ex 명령 모드로 들어간다.




■ VI 의 명령어


 

vi

파일 이름 없이 시작, 문서 작성 후 저장할 때 파일 이름을 주어야 한다.

vi filename

지정한 파일로 vi 편집기를 시작한다.

vi -r filename

이전의 작업중이던 문서가 비정상적으로 종료되어 저장되지 못하였을 경우 파일을 어느정도 복구할 수 있다.

vi filename1 filename2 ..

여러개의 화일을 동시에 편집할 수 있다.

vi +10 filename

지정한 파일의 10번째 줄에서 시작한다.

vi +/young filename

지정한 파일에서 young 이라는 단어가 나오는 줄에서부터 시작한다.

<vi 의 시작>


ZZ

문서를 현재 지정된 파일에 저장하고 vi를 종료한다.

:q

vi를 종료한다. 수정된 내용이 있다면 vi가 계속 수행된다.

:q!

vi를 무조건 종료한다. 수정된 내용은 저장되지 않는다.

:wq

ZZ와 동일한 명령

:w

문서의 내용을 현재 파일에 저장한다.

:w filename

문서의 내용을 지정하는 파일에 저장한다.

:w!

vi가 읽기전용모드로 실행되더라도 강제적으로 저장한다.

:10,20 w filename

문서 10~20째 줄의 내용을 파일에 저장한다.

:r filename

지정한 파일의 내용을 현재 커서가 있는 줄 다음에 읽어 들인다.

:e filename

현재 파일을 지정한 파일로 변경한다.

<문서의 읽기와 저장>


h,[Del],[BackSpace]

왼쪽으로 한 글자 이동

l,[Space Bar]

오른쪽으로 한 글자 이동

j, +

아래쪽으로 한 글자 이동

k, -

위쪽으로 한 글자 이동

* 명령앞에 숫자를 주면 그 숫자 만큼 반복하여 명령을 실행한다. ex) 100j - 100줄 아래로

<커서의 이동, 문자 단위의 이동>


w, W

다음 단어의 첫 글자로 이동

b, B

이전 단어의 첫 글자로 이동

e, E

다음 단어의 끝 글자로 이동

 * 소문자 명령과 대문자 명령의 차이는 단어의 범위 결정방법에 따라 생긴다. 즉 문자, 숫자, 밑줄, 특수 문자등의 단위로 수행되는 명령이 w, b, e 이고, [Space                 Bar] 와 [Enter] 으로만 구분하여 수행하는 명령이 W, B, E 이다.

<단어 단위의 이동>


0

행의 첫번째 위치로 이동

^

행의 첫번째 문자로 이동

$

행의 끝 위치로 이동

[Enter]

다음줄 첫 문자로 이동

H

화면의 상단으로 커서를 이동

M

화면의 중간으로 커서를 이동

N

화면의 하단으로 커서를 이동

<행에서의 이동>


(

문장의 시작점으로 이동

)

문장의 끝점으로 이동

{

단락의 시작점으로 이동

}

단락의 끝점으로 이동

[[

절의 시작점으로 이동

]]

절의 끝점으로 이동

 * vi에서는 `?`, `!`, `.` 으로 끝나고 공백이 두개 이상 있을 때 한 문장으로 본다. 단락구분은 공백 행이 있을 때 기준으로 하고, formfeed(^l)나 { 로 시작되는 줄을 절의 시작으로 } 로 끝나는 줄을 절의 끝으로 본다. C 언어에서 프로그램 함수의 시작과 끝으로 {, } 를 사용하므로 함수 하나가 하나의 절이 된다. 따라서 ]] 명령은 함수 단위로 이동하는 효과를 가져온다.

<문장, 단락, 절 단위의 이동>


G

파일의 맨 끝 줄로 이동

nG

n 번째 줄로 이동

:n[Enter]

nG와 같다.

<지정된 행으로의 이동>


^f

한화면 분량만큼 위로 스크롤 시킨다.

^d

한화면 분량만큼 아래로 스크롤 시킨다.

^b

반화면 분량만큼 위로 스크롤 시킨다.

^u

반화면 분량만큼 아래로 스크롤 시킨다.

<화면 제어>


a

현재 위치의 다음부터 입력 시작

A

현재 줄의 끝에서부터 입력 시작

i

현재 위치의 앞에서부터 입력 시작

I

현재 줄의 처음에서 입력 시작

o

현재 줄과 다음 줄 사이에 입력 시작

O

현재 줄과 앞 줄 사이에 입력 시작

<문서의 입력>


x

현재 위치의 한글자 삭제

X

현재 위치의 앞 글자 삭제

dd

현재 줄을 삭제

D

현재 위치에서 줄 끝까지 삭제

d<object>

object를 삭제, 즉 db, dw, d$ 등등..

yy, Y

현재 줄을 버퍼에 복사

y<object>

object를 버퍼에 복사, 즉 yw, yb, y$ 등등..

p

버퍼에 저장된 내용을 현재 커서의 오른쪽이나 아랫줄에 추가

P

버퍼에 저장된 내용을 현재 커서의 왼쪽이나 윗줄에 추가

"

버퍼를 지정

 * vi에서는 여러개의 버퍼를 제공한다. 그리고 이 버퍼들은 모두 이름을 가지고 있다. 따라서 삭제나 복사 명령시 버퍼 이름을 지정하면 해당하는 버퍼에 저장이 되고, 붙여넣기 명령에도 버퍼의 이름을 지정하면 그 버퍼의 내용이 첨부된다. 버퍼의 이름은 1~9, a~z 이다.

<문서의 삭제, 복사 및 붙여 넣기>


r

한 글자를 교환한다.

R

현재 위치에서 [ESC]를 칠 때까지 교환한다.

s

현재 위치의 글자를 지우고 다른 것으로 치환한다.

S

현재 줄을 삭제하고 다른 것으로 치환한다.

cc

S 명령과 같다.

C

현재 위치에서 줄 끝까지 지우고 다른 것으로 변경한다.

c<object>

object를 삭제하고 다른 것으로 변경한다.

<문서의 교환과 치환>


u

바로 전에 수행한 명령을 취소한다.

U

현재 줄에서 수행된 모든 것을 원상태로 복구한다.

.

바로 전에 수행한 명령을 반복한다.

<명령 취소 및 반복>


/pattern

현재 위치에서 뒤쪽으로 pattern 을 찾는다.

?pattern

현재 위치에서 앞쪽으로 pattern 을 찾는다.

n

뒤쪽으로 반복해서 pattern 을 찾는다.

N

앞쪽으로 반복해서 pattern 을 찾는다.

/[Enter]

뒤쪽으로 반복해서 패턴을 찾는다.

f[character]

현재 커서의 위치에서 앞방향으로 가면서 지정한 character를 찾아 커서를 옮긴다.

F[character]

현재 커서의 위치에서 뒤방향으로 가면서 지정한 character를 찾아 커서를 옮긴다.

t[character]

현재 커서의 위치에서 앞방향으로 가면서 지정한 character를 찾아 다음칸에 커서를

옮긴다.

T[character]

현재 커서의 위치에서 뒤방향으로 가면서 지정한 character를 찾아 다음칸에 커서를

옮긴다.

;

f, F, t, T 명령 중 가장 최근에 수행된 명령을 반복한다.

<검색>


:s/string/newstring/

현재 줄에 있는 첫번째 해당 문자열을 새 문자열로 치환한다.

:s/string/newstring/g

현재 줄에 있는 모든 해당 문자열을 새 문자열로 치환한다.

:g/string/command

해당 문자열을 찾을 때마다 명령을 수행한다.

:g/string/s//newstring/g

파일 전체에 대해 해당 문자열을 새 문자열로 치환한다.

:1,$ s/string/newstring/g

파일 전체에 대해 해당 문자열을 새 문자열로 치환한다.

<치환>


:sh

shell 을 수행시킨다.

:!<shell command>

shell 명령을 수행한 후 vi 로 돌아온다.

 * 예를 들어 현재 작성중인 파일이름이 test.c 라 할때 !cc test.c 명령을 주면 컴파일된다.

<shell 사용>


~

대문자는 소문자로, 소문자는 대문자로 치환한다.

J

현재줄과 아래줄을 연결한다.

^I

화면을 지우고 다시 그린다.

%

( ) 나 { } 의 대칭되는 위치를 찾는다.

^g

파일에 관한 정보(파일이름, 총 줄수, 크기, 현재 커서의 위치좌표 등)를 표시한다.

<기타>


noautoindent

nonumber

noslowopen

autoprint

nonovice

nosourceany

noautowrite

nooptimize

tabstop

nobeautify

paragraphs

taglength

directory

prompt

tags

noedcompatible

noreadonly

tagstack

noerrorbells

redraw

term

flash

remap

noterse

hardtabs

report

timeout

noignorecase

scroll

ttytype

nolisp

sections

warn

nolist

shell

window

magic

shiftwidth

wrapscan

mesg

noshowmatch

wrapmargin

nomodeline

noshowmode

nowriteany

 

 

 

 * vi 에서 :set all 명령을 사용하면 현재 지정되어 있는 vi 의 옵션을 모두 보여준다. 특정옵션을 고치고자 할 때는 :set autoinden , :set tapstop=4 등과 같이 하면 된다.

* 변경하는 옵션 설정 명령을 홈 디렉토리의 .exrc파일에 저장하여두면 vi 는 실행될때마다 자동적으로 읽어 수행한다.

<환경설정>







      << prev     1  2  3  4  5  6     next >>