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> 키를 누르면 됩니다.
~ ~ ~ ~ -- insert --
위의 명령어는 명령어 입력 상태에서 사용하는 vi 편집기 명령어들입니다. :를 입력하면 커서가 하단으로 이동하게 되는데 이때 입력되는 문자는 모두 명령어가 됩니다. vi 편집기에서 명령어를 볼 수 있는 경우는 :와 /를 입력한 경우뿐입니다.
2. 화면과 커서 제어 관련 명령어
vi 편집기에는 스크롤바가 없습니다. 마음대로 화면을 올렸다 내렸다 하지 못하기 때문에 당연히 전 화면과 앞 화면을 보기 위해서는 명령어를 사용해야 합니다. <esc>키를 눌러 명령어 입력 상태로 변환한 후에 다음 표와 같은 명령어를 사용하면 원하는 위치로 화면이나 커서를 이동할 수 있습니다.
● 화면 이동 명령어
● 커서는 방향키와 문자키로 제어할 수 있다.
● 커서의 단어 사이 이동
● 화면에서의 커서 이동 제어
● 문서 편집 상태로 만드는 명령어는 다음과 같다.
● 입력된 문자의 삭제
참고로 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 명령어 옵션
: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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[목차] |