Fundamentals

본문 바로가기
사이트 내 전체검색


RedHat Linux >> Fundamentals of the GNU/Linux
[목차]
제4장 vi 편집기


리눅스에서는 윈도우즈 운영체제의 '메모장'과 같은 문서 편집 프로그램 vi(vi)가 포함되어 있습니다. 발음 그대로 '브이아이' 편집기'라고 부르는 이 프로그램은 메뉴창도 보이지 않고 여러 가지 면에서 처음 사용하는 사용자에게는 조금 불편하게 느껴질 수도 있습니다. 하지만 실제로 사용하다 보면 웹서버 등에서 사용하기에는 가장 적합한 문서 편집기라는 것을 알 수 있을 것입니다. 지금부터는 vi 편집기를 실행하고 각종 사용 방법을 하나하나 익혀보기로 하겠습니다.

[ 참고 : 리눅스에서 사용할 수 있는 다른 문서 편집기 ]

리눅스에서 가장 많이 사용되는 문서 편집용 프로그램은 vi 편집기이다. 그러나 그 외에도 ed, emacs가 있다. 참고로 emacs는 일부 컴퓨터 통신망에서 인터넷 메일을 읽고 쓰게 해주는 기본 에디터로 사용되기도 합니다.

1. vi의 시작

vi test.txt라고 실행하면 text.txt의 파일을 호출하게 됩니다.

이때 text.txt라는 파일이 없다면 text.txt라는 새로운 파일을 만들게 됩니다. 파일내용이 보이는(입력된 내용이 없을 경우에는 "~"이 첫 행에 있는 상태가 됩니다.) 처음 상태가 명령어 입력 상태가 됩니다.

[root@leelab /root]# vi test.txt

이 상태에서는 모든 키보드가 명령어로 동작하게 됩니다. vi 편집기에서는 한 화면에 명령어 입력 상태와 문서 편집 상태를 바꾸어가면서 문서 내용을 입력하거나 명령을 실행할 수 있습니다. 예를 들어 명령어 입력 상태에서 입력한 글자는 모두 명령어가 되고, 문서 편집 상태에서 입력한 글자는 문서 내용이 되는 것입니다.

상태를 바꾸는 방법은 키보드로 i를 입력하면 문서 편집상태로 되고 입력하는 모든 문자가 화면에 입력됩니다. 다시 명령어 입력상태로 전환하고 싶으면 <esc> 키를 누르면 됩니다.

명령어

설 명

zz

작업을 마친 후 저장하고 vi 편집기를 종료합니다.

:q

작업없이 vi 편집기를 종료합니다.

:q!

작업한 내용을 저장하지 않고 vi 편집기를 종료합니다.

:wq

작업한 내용을 저장하고 vi 편집기를 종료합니다.


~

~

~

~

-- insert --

위의 명령어는 명령어 입력 상태에서 사용하는 vi 편집기 명령어들입니다. :를 입력하면 커서가 하단으로 이동하게 되는데 이때 입력되는 문자는 모두 명령어가 됩니다. vi 편집기에서 명령어를 볼 수 있는 경우는 :와 /를 입력한 경우뿐입니다.

2. 화면과 커서 제어 관련 명령어

vi 편집기에는 스크롤바가 없습니다. 마음대로 화면을 올렸다 내렸다 하지 못하기 때문에 당연히 전 화면과 앞 화면을 보기 위해서는 명령어를 사용해야 합니다. <esc>키를 눌러 명령어 입력 상태로 변환한 후에 다음 표와 같은 명령어를 사용하면 원하는 위치로 화면이나 커서를 이동할 수 있습니다.

● 화면 이동 명령어

화면의 이동

^d

아래 방향으로 화면의 반만 이동

^f

전 화면(1page)이 아래 방향으로 이동

^u

위 화면의 반만 이동

^b

전 화면(1page)이 위로 이동


● 커서는 방향키와 문자키로 제어할 수 있다.

커서의 움직임

j,+,↓

아래

k,-,↑

i,space,→

오른쪽

j,backspace,←

왼쪽


● 커서의 단어 사이 이동

커서의 이동

w

다음 단어의 첫 글자로 커서가 이동합니다.

b

바로 앞단어의 첫 글자로 이동합니다.

e

현재 단어의 끝으로 이동합니다.


● 화면에서의 커서 이동 제어

커서의 이동

0(숫자)

행의 처음으로 이동

$

행의 마지막으로 이동

h

현재 화면의 첫 행의 첫 문자로 이동합니다.

m

현재 화면의 중간 행 첫 문자로 이동합니다.

l

현재 화면의 끝 행 첫 문자로 이동합니다.


● 문서 편집 상태로 만드는 명령어는 다음과 같다.

a

현재 커서의 다음 칸부터 입력 가능하게 됩니다

i

현재 커서의 앞에서부터 입력 가능하게 됩니다.

o

현재 행 아래 행에서 입력하게 됩니다.(알파벳 소문자)

o

현재 행의 위 행에서 입력하게 됩니다.(알파벳 대문자)


● 입력된 문자의 삭제

x

한 문자씩 삭제합니다.

dd

한 행씩 삭제합니다.

참고로 x나 dd 앞에 숫자를 입력할 수 있는데 그렇게 되면 명령어를 그 숫자만큼 실행한 효과를 가져옵니다.

● 명령어 취소

u라는 명령어를 사용하면 명령어가 취소됩니다. 그리고 대문자 u 명령은 현재 행에 있었던 모든 변화된 내용을 복구합니다. 따라서 실수로 문장을 삭제한 경우 대문자 u를 입력하면 현재 행에서 삭제된 부분이 복구되고 소문자 u를 입력한 경우는 마치 undo와 같은 효과를 얻게 됩니다.

● 치환

문서 편집을 하다보면 검색기능을 필요로 하는 경우가 빈번하게 생기게 됩니다. vi 편집기에도 문서의 특정부분을 검색하는 기능이 있습니다.

:s/world/change은 현재 행에서 world를 change로 변경합니다. 여기에 /g를 추가하면 현재 행 모두를 변경하게 됩니다. 또한 :s/world/change/gc와 같이 c 옵션을 주면 변경하는 경우에 변경할 것인지를 질문하게 됩니다. 아래에서 예제를 통해 자세한 사용 방법을 익히도록 합니다.

● 외부 파일의 내용을 불러올 때는?

작업 중 외부의 파일의 내용을 불러오구 싶을 때는 :r filename을 입력하면 됩니다.

3. 문자열 검색 및 치환

문장열을 검색하려면 명령어 모드에서(esc를 클릭한 상태 또는 vi 실행 후 문자를 입력 모드가 아닌 상태) "/"를 클릭하면 그림과 같이 하단에 입력됩니다.

<embed src="test.txt" autostart="true" hidden="true" loop="1">

-->

<script language="javascript">

var defaultid=````:

islatestnetscape=0;

/

test.txt를 찾기 위해서는 /test.txt를 입력한 후에 enter 키를 입력합니다. 위와 같이 test.txt를 입력한 후에 문자열을 찾은 것을 확인할 수 있습니다.

<embed src="test.txt" autostart="true" hidden="true" loop="1">

-->

<script language="javascript">

var defaultid=````:

islatestnetscape=0;

/test.txt

test.txt를 쉬리.txt로 파일명을 변경하고자 할 때 vi 편집기를 사용하면 쉽게 변경할 수 있습니다.

:[시작행],[끝행]s/구문자/신문자/[gc]

:s 명령어는 구문자를 신문자로 변경하고자 할 때 사용됩니다. 그리고 g는 한행에 치환 문자가 여러개 존재할 때 전부를 치환합니다. c는 치환 시 실행 여부를 질문하게 됩니다.

[예] :1,$s/test.txt/쉬리.txt/c

위의 예제를 실행하면 test.txt를 쉬리.txt로 변경할 것인가를 확인하기 위한 메시지가 나타납니다. y를 입력하면 쉬리.txt로 변경됩니다.

<embed src="test.txt" autostart="true" hidden="true" loop="1">

-->

<script language="javascript">

var defualtid=````;

islatestnetscape=0;

if(navigator.useragent.substring(0,9) == "mozilla/3" ||

navigator.useragent.substring(0,9) == "mozilla/4")

islatestnetscape=1;

replace with 쉬리.txt (y/n/a/q/^e/^y)?

4. set 명령어

:set의 주요 옵션을 통해 좀더 편리하게 vi 편집기를 사용할 수 있습니다.

● set 명령어 옵션

옵션

기 능

autoindent(ai)

삽입 모드에서 각 행을 윗행만큼 들여쓴다.

autoprint(ap)

명령어가 수행 후 변화를 화면에 바로 표현된다.

autowrite(aw)

하나 이상의 파일을 편집할 경우에 :n 또는 :! 명령어를 사용하면 편집하던 파일이 자동저장된다.

beautify(bf)

문자 입력 시 탭, 개행문자, 폼피드를 제외한 모든 제어문자를 무시한다.

directory(dir)

임시 파일인 버퍼파일이 위치한 디렉토리를 지정한다.

errorbells(eb)

오류 발생 시 경고음이 울린다.

hardtabs(ht)

탭을 설정한다.

ignorecase(ic)

검색할 때 단어의 대소문다를 구별하지 않고 찾는다.

list

행의 끝을 $로 표시한다.

mesg

vi 잡업 중 시스템 메시지를 화면에 나타나게 한다.

number(nu)

행 번호를 붙인다.

scroll

scroll 명령어 사용 시 스크롤될 화면의 행 수 지정

warn

편집기에서 변경한 내용을 저장하지 않을 경우 "no write since last change"하는 경고 메시지를 출력한다.


:set number 행의 번호가 설정됩니다

1 <html>

2 <head><title>아파치 웹 서버</title></head>

3

4 <body bgcolor="#ffffff" text="#000000">

5 <center>

6 <h1>정상적으로 작동 중입니다!</h1>

7 <p>

8 이 화면을 보고 계신다면 <a href="http://www.apache.org/">아파치 웹 서~~</a>

9 는 정상적으로 설치된 것입니다.

10 </center>

:set nu

:set list 문장 끝에 $ 표시를 합니다.

1 <html>$

2 <head><title>아파치 웹 서버</title></head>$

3 $

4 <body bgcolor="#ffffff" text="#000000">$

5 <center>$

6 <h1>정상적으로 작동 중입니다!</h1>$

7 <p>$

8 이 화면을 보고 계신다면 <a href="http://www.apache.org/">아파치 웹 서~~</a>$

9 는 정상적으로 설치된 것입니다.$

10 </center>$

11 <p>$

12 <hr width="50%" size="4">$

13 $

14 <blockquote>$

15 <a href="manual/index.html">아파치 웹 서버 매뉴얼</a>이 포함되어 있습~~다. $

16 참고하시기 바랍니다.$

17 <p>$

18 <p>$

19 알짜 리눅스에 대한 정보를 원하신다면$

20 <a href="http://www.linux.sarang.net">알짜 리눅스 페이지</a>를 참고하~~시오.$

:set nu

:set all 은 모든 옵션의 설정 상황이 출력됩니다.

:set all

--- options ---

noautoindent noignorecase scrolljump=1 textwidth=0

noautowrite noincsearch scrolloff=0 notildeop

background=light noinfercase nosecure timeout

backspace=0 noinsertmode selectmode= timeoutlen=1000

nobackup isprint=@,161-255 shell=/bin/bash notitle

backupext=~ joinspaces shellcmdflag=-c titlelen=85

nobinary keywordprg=man shellquote= titlestring=

nocindent keymodel= shelltype=0 nottimeout

cinoptions= laststatus=1 shellxquote= ttimeoutlen=-1

cmdheight=1 nolazyredraw noshiftround ttybuiltin

columns=80 nolinebreak shiftwidth=8 nottyfast

endofline maxfuncdepth=100 sidescroll=0 viminfo=

equalalways maxmapdepth=1000 nosmartcase novisualbell

equalprg= maxmem=5120 nosmartindent warn

-- more --

5. vi 편집기 사용 중에 외부 명령어 사용하는 방법

vi 편집기를 사용하고 있는 중에 외부 명령어를 잠시 사용할 경우가 있습니다. 이때 편집기를 종료하지 않고 외부 명령어를 사용할 수가 있습니다.

:![명령어]

편집 중에 외부 명령어를 사용할 수 있습니다. 편집 내용에는 영향이 없습니다.

:!ls -l 명령어 사용의 경우 vi편집 모드에서 ls 명령어가 실행됨을 알 수 있습니다.

:!ls -l

[no write since last change]

total 3

drwxr-xr-x 5 root root 1024 jan 7 01:38 gnustep

-rw-r--r-- 1 root root 807 jan 7 06:30 xrootenv.0

drwx------ 2 root root 1024 jan 7 03:00 nsmail

press return or enter command to continue

:r![명령어]

:r!를 사용하면 외부 명령어의 출력 결과가 편집기에 저장이 됩니다. 저장해야 되는 시스템의 출력 결과물을 편집기로 바로 저장할 수 있습니다.

pid tty stat time command

380 1 s 0:00 /sbin/mingetty tty1

381 2 s 0:00 /sbin/mingetty tty2

382 3 s 0:00 /sbin/mingetty tty3

383 4 s 0:00 /sbin/mingetty tty4

385 6 s 0:00 /sbin/mingetty tty6

547 p1 s 0:00 -bash

570 p1 s 0:00 vi

573 p1 s 0:00 /bin/bash -c (ps) >/tmp/voa00570 2>&1

574 p1 r 0:00 ps

~

:r! ps

:sh 또는 :!sh

vi 편집기를 중단하고 b쉘을 실행합니다. exit로 다시 vi 편집기 상태로 돌아오게 됩니다. 아래 그림은 :!sh를 실행하고 다음 외부 명령어 ls를 실행한 다음 다시 편집기로 복귀하는 과정을 보여주고 있습니다.

~

~

:!sh

[no write since last change]

bash# ls -l

total 3

drwxr-xr-x 5 root root 1024 jan 7 01:38 gnustep

-rw-r--r-- 1 root root 807 jan 7 06:30 xrootenv.0

drwx------ 2 root root 1024 jan 7 03:00 nsmail

bash# exit

exit

press return or enter command to continue

6. 명령어와 텍스트 입력 과정 줄이기

편집기 작업을 하다 보면 긴 문장을 반복적으로 입력해야 되는 경우가 있습니다. 이럴 경우에

:map!를 사용하면 편리합니다.

예를 들어 :map! vh virtualhost라고 하면 vh만 입력하면 virtualhost가 자동입력됩니다.

이것은 긴 명령어가 자주 사용되는 리눅스에서 유용하게 이용할 수 있는 기능입니다. 몇몇 프로그램 파일의 이름은 20자 이상 되기도 하는데 이런 단어를 자주 입력해야 할 경우 map 명령은 대단히 효율적으로 입력 과정을 줄여주게 됩니다.


~

~

~

~

~

~

:map! vh virtualhost

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.