메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

소프트웨어(윈도우) 일반

LINUX vi 문서 편집

2007.10.26 14:25

WhiteAT 조회 수:6534

vi 문서 편집

 

1. 기본 편집 기능

 1) 예제 화일 만들기

   $ vi ex1            : ex1 이라는 화일을 만든다.

a                        : append의 약자로 문서 입력 모드로 들어간다.(화면에 보이지

않음, 한 번만 입력)

      John            : vi 편집

      has

      seen

      some

      mice

      and

      men.

      <ESC>             : 명령모드로 되돌아가기 위해서

      ZZ            : 작업한 것을 저장하고 셸로 되돌아 간다. (화면에 보이지 않음)

   $ cat ex1   : 방금 작업한 ex1 파일의 내용 확인

 

  2) 화일 안에서의 커서 이동

      h : 한 문자 왼쪽으로 이동

      j  : 한 줄 아래로 이동

      k  : 한 줄 위로 이동

      l  : 한 문자 오른쪽으로 이동    

      G : G앞에 있는 줄 번호로 이동  ex) 1G  : 첫번째 줄로 이동

              앞에 줄 번호가 없으면 파일 끝으로 이동

    명령 앞의 숫자는 명령을 반복적으로 수행함  ex) 4j  : 4줄 아래로 이동

   

   ex) 큰 파일의 예(사전)

   $ vi -R /usr/dict/words          : -R(read-only)로 words라는 단어 사전을 연다.

-R는 화일이 실수로 수정되는 일을 막는다.

    G                : 파일 끝으로 이동

    1G              : 파일의 처번째 줄로 이동

   ^F(ctrl+f)            : 한 화면 다음으로 이동

   ^B               : 한 화면 앞으로 이동

   ^D                : 화면 반만큼 아래로 이동

   ^U               : 화면 반만큼 위로 이동

              // 소문자 f, b, d, u로 실습하세요.

 

   w                 : 한 단어 다음(단어 첫문자)으로 이동

   b                  : 한 단어 앞으로(단어 첫문자)이동

   e                  : 한 단어 다음(단어 끝)으로 이동

 

  3) 문서의 첨가와 삽입

   a                  : 현재 커서 다음에 문서 추가

   i                   : 현재 커서 앞에 문서 추가

   o                  : 현재 줄 다음에 문서 추가

   O                 : 현재 줄 앞에 문서 추가

  <ESC>            : 명령모드로 가는 명령어

  <CR> : Enter키

 

  ex)

    $vi ex2

      a             : 현재 커서 다음에 문서 추가

      Sam                              Sam's

      fleas        a's<ESC>         fleas

      flew                           flew

      fast                           fast

 

      i              : 현재 커서 앞에 문서 추가i

      Sam's                            Sam's

      fleas     iyy<CR>still<ESC>     fleas

      flew                            fleyyw

      fast                            still

                                     fast

 

o    : 새로운 줄에서 문서 입력(현재 커서 다음 줄에 추가,

                             O 는 현재 커서 앞줄에 추가)

    Sam's                              Sam's

    fleas           onew<ESC>         new

    flew                                fleas

    fast                                fleyyw

                                        still

                                                           fast

  4) 문서의 삭제

   x                  : 현재 커서의 한 문자 지움

   3x                : 현재 커서부터 뒤로 3문자 지움

   dw               : 현재 커서의 뒷 단어 지움

   db                : 현재 커서의 앞 단어 지움

   dd                : 한 줄 지움

   d$                : 현재 커서의 단어부터 끝까지를 지움

   d^                : 현재 커서부터 처음까지 지움

   u                  : 마지막 변경을 취소

   U                 : 한 줄을 회복하여 재저장

 

  ex)  x 명령과 u 명령

   Admiral                                                                      ral

   John                                    John                             John                                        

   Paul             kkk4x3x            Paul        u                      Paul

   es                                        es                                es

 

   ex) x 명령과 U 명령

  Admiral                                                                      Admiral

  John                                      John                             John                                        

  Paul              kkk4x3x            Paul       U                      Paul

  es                                         es                                es

 

5) 화일 관리

 $ vi ch             : ch 라는 화일이 있으면 열고, 없으면 새로 만든다.

 

 a) 종료하지 않고 저장하기(명령모드)

    :w<CR>                   : 원래의 화일명에 저장

    :w filename<CR>            : 지정된 화일명(filename)에 저장

 b) vi 끝내기

    :q<CR>                   : 끝냄(수정된 화일이 저장되지 않았다면 경고 출력,

                            저장된 경우만 끝낼수 있음)

    :q!<CR>                  : 저장 안하고 끝냄(경고를 내지 않음)

    ZZ                          : 저장 후 끝냄

c) 다른 화일의 편집

:e              : vi를 끝내지 않고, :w 를 이용하여 저장한 후에 :e 명령을

이용하여 원하는 화일을 편집할 수 있다.

    :e fillename<CR>            : :w로 현재 편집내용을 저장 안하고, filename을 호출하면

오류발생

    :e! filename<CR)            : 현재 편집내용을 저장 안하고, 편집하고자 하는

filename을 호출

e) 한 화일을 다른 화일에 첨가

     :r              : 지정된 화일의 내용을 읽어옴

                    현재 편집하고 있는 화일에 다른 화일을 읽어 그 내용을

삽입한다.

즉 현재의 새로운 줄 다음에 다른 화일 내용이 첨가된다.

 

    // 파일관리의 자세한 예는 교재를 참고 하세요(P 83 - 87).

 

 

2. 응용 편집 기능

1) 편집중 셸로 나감

일시적으로 셸로 빠져감

    :!             : 한 개의 명령을 실행 후 vi로 돌아온다.

    :sh                    : 여러 개의 명령을 실행한다.(사용자가 원할 때 까지 사용 가능)

                          exit, ^D 명령으로 셸을 끝내고 편집중인 vi로 돌아올 수 있다.

Ex)

    Flying                                            Flying

    Roaches                                        Roches

    Tonight at               :sh<CR>          Tonight at

    Roseland                                       Roseland

                                                            :sh

                                                            $             : 셸 프롬프트로 일시적으로 나옴

                                                            $ ls<CR> : 셸 명령 실행

    편집중인 vi로 돌아가기 위해서는 exit 나 ^D(ctrl+d) 명령 사용

2) 문서 탐색

f     :  현재 줄에서 f 다음의 문자를 오른쪽으로 탐색

F    :  현재 줄에서 F 다음의 문자를 왼쪽으로 탐색

;     :  f 나 F 명령을 반복 실행한다.

/   :  : 명령과 같이 커서는 화면의 밑줄로 이동한다. 그 다음에 탐색할

단어를 치고 Enter를 친다.

?   :  현 위치에서 파일의 처음 부분으로 역 방향 탐색을 한다

         마지막 탐색은 n(next occurrence)명령으로 반복 실행할 수 있다.

       N 명령은 반대 방향으로 반복 실행

Ex) f 명령

Flying                                  Flying                                       Flying

Roaches                             Roaches                                Roaches

Tonight          ft                 Tonight at               ;                 Tonight at

Roseland.                           Roseland                                Roseland.

 

Ex) / 명령

Flying                                  Flying

Roaches                            Roaches

Tonight at    /land<CR>   Tonight at

Roseland                            Roseland

 

Ex) ? 명령

    Roaches                            Roaches                    Roaches

    Tonight at                             Tonight at                     Tonight at

    Roseland               ?Ro<CR>            Roseland        n            Roseland

    Ballroom                            Ballroom                     Ballroom

                                               

 

3) 화면 표시의 조정

z<CR>      : 현재 줄을 화면의 맨 위로 이동

z.               : 현재 줄을 화면의 중간으로 이동

z-                           : 현재 줄을 화면의 맨 밑으로 이동

^E(ctrl+e)     : 윈도를 한 줄 아래로 이동시킴

^Y       : 윈도를 한 줄 위로 이동

^D      : 화면 반만큼 아래로 이동

^U      : 화면을 위로 반만큼 이동

H        : 화면의 맨 윗줄로 커서를 이동

M        : 화면의 중간 줄로 이동

L         : 맨 밑줄로 커서를 이동

 

4) 문서를 수정하는 다른 방법

r     : r 다음에 대체할 한 문자를 침으로써 커서의 문자가 그 문자로 대치된다.

s    : 커서 위의 내용이 다음에 나오는 문자들로 대체된다.

    c  : d 명령처럼 다음에 변경되는 범위를 나타내는 문자가 온다.

Ex) cw : 단어, cb : 앞 단어,  c$ : 그 줄의 끝까지,

c^ : 그 줄의 시작 부분   cc : 그 줄 전체를 변경

J(대문자)             : 줄을 합친다.

 

Ex)  r 명령 사용 예

    the arc                               The art                         The art

    of third                                of third                          of

    century        fcrt                   century               jbhr<CR>   third

    guitar                                 guitar                           century

                                                                               guitar

    s 명령 사용 예

    Five                                                Five

    family                                             families

    units            ddkfysies<ESC>      went to

    went to                                           Brazil

 

    c 명령 사용 예

    Five                                                   Five

    family                                                family

    units       bcwmembers<ESC>    members

    went to                                              went to

 

    J 명령 사용 예

    One                                                One_Two

    Two                                                Three

    Three                     J                       Four

    Four                                               Five

 

3. 특수 편집 기능

1) 원하는 형태로 선택하여 편집   // 자세한 것은 교재 참조(p 95 ? 96)

set 명령으로 가능하게 하거나 불가능하게 할 수 있다.

:set all<CR>      : 지정된 전체의 내용을 보여준다.

:set modename<CR>      : modename 설정 활성화

:set nomodename<CR>      : modename 설정 비활성화

:set modename=medeval<CR>      : modeval의 값으로 지정

 

자주 쓰이는 선택사항

autoindent : 프로그램 편집기나 다른 작업을 할 때 앞부분에 빈 칸이 있는

            경우에 사용된다.(약어는 ai이며 기본 지정은 noautoindent)

ignorecase : vi가 탐색하고 대체하는데 대소문자 구별하지 않도록 한다.

            (약어는 ic이며 기본 지정은 noignorecase)

list       : 탭을 ^I로, 줄 끝을 $로 표시하여 화면에 나타나도록 한다.

           (약어는 li이며 기본 지정은 nolist)

magic 모드 : vi의 정규화 표현을 가능하게 한다.

             (기본 지정은 magic)

number 모드 : vi에게 각 줄의 처음에 줄 번호를 화면에 나타나도록 한다.

(약어는 nu이며 기본 지정은 nonumber)

    shell             :  :!와 :sh 명령을 사용할 때 셸 이름을 나타낸다.

                           Shell을 /bin/csh 로 지정하면 C shell을 사용할 수 있다.

                 (약어는 sh)

    shiftwidth            : vi의 소프트웨어 탭이 멈추는 너비를 나타낸다.

                (약어는 sw)

    term            : 터미널 이름

   

2) 문서 마크

^G(ctrl+g)      : 현재 줄 번호를 알림

ma       : a라는 이름의 표시로 문서를 마크

a         : a로 표시된 줄로 이동

`a         : a로 표시된 문자 위치로 이동

da       : 현재 줄에서부터 a로 표시된 줄까지 삭제

d`a       : 현재 커서 위치에서부터 a로 표시된 문자 위치까지 삭제

 

ex) 줄로 이동하는 경우

    flowers                               flowers                         flowers

    fertile                                  fertile                            fertile

    fragrant        majj                  fragrant            a            fragrant

    folly                                    folly                              folly

 

    문자 위치로 이동하는 경우

flowers                              flowers                         flowers

    fertile                                  fertile                            fertile

    fragrant        majj                  fragrant            `a            fragrant

    folly                                    folly                              folly

 

    현재 커서부터 z로 표시된 문자 위치까지 삭제

flowers                              flowers                         flowers

    fertile                                  fertile                            file

    fragrant        mzlll                 fragrant            d`z            fragrant

    folly                                    folly                              folly

    마크는 새로운 편집을 시작하거나, 그 줄의 내용을 변경하면 없어진다.

 

3) 문서 일부의 이동

한 파일 안에서 한 절을 다른 곳으로 이동시키거나 한 파일에서 다른 파일로

문서를 이동시키는 경우이다.

Vi에는 세 가지 종류의 버퍼가 있다.

(1) 이름이 없는 버퍼   // 삭제를 하면 일단 저장되는 버퍼

(2) a에서 z까지의 이름이 붙은 26개의 버퍼 // 이름을 정할 수 있는 버퍼

(3) 최근에 삭제된 9줄을 갖는 9개의 숫자 버퍼 // 마지막 9번의 삭제된

                                               내용을 포함하고 있다.

 

x, dw, d$, dd       : 문서 삭제 명령

        P             : 위의 삭제 명령에 의해 버퍼에 저장되어 있는 내용을

                    복사하여 현재 커서 앞에 회복할 수 있다.

     p              : 현재 커서 뒤에 버퍼 내용을 복사하여 회복 시킨다.

y                     : 문서를 버퍼에 저장한다

              ex) yw,  y$,  y^,  ya,  y`b,  yy

 

// 이름이 없는 버퍼 이용

Ex) 대문자 P에 의한 이동

Bruce                Bruce               Bruce

McGurk is         McGurk                        McGurk

 a              dwjh      _a              P      is a

soda                 soda                soda

 

소문자 p에 의한 이동

Bruce                Bruce               Bruce

McGurk             is a                  is a

is a            ddj soda        p          soda

soda                 jerk !                 McGurk

                                                       jerk !

저장명령(버퍼에 저장) y에 의한 이동

Bruce                Bruce               McGurk

McGurk             McGurk                        is a

is a           yyjj       is a            p      soda

soda                 soda                McGurk

// 새로운 파일의 편집을 시작할 때마다 vi는 이름이 없는 버퍼를 삭제한다.

   그러므로 이는 한 파일에서 다른 파일로 문서를 옮길 수 없다. 

 

4) 문서를 한 파일에서 다른 파일로 이동(2가지 방법이 있음)

(1)    문서를 이름이 있는 버퍼에 저장 방법

(2)    문서를 중간 파일에 저장 방법

 

    (1) 문서를 이름이 있는 버퍼에 저장하는 방법 이용

a        : yank(저장), 삭제, 출력에 사용하는 접두사로 이름 있는 버퍼 a를

                   나타냄(버퍼이름 a)

fdw      : 한 단어를 삭제하여 버퍼 f에 저장한다.

fp        : 버퍼 f의 내용을 문서에 넣는다.

aya      : 현재 줄에서 a로 표시된 줄까지(a) 버퍼(a)로 저장한다(y).

               이름을 가진 버퍼는 현재 vi의 편집 동안에만 유지된다.

 

Ex)  flowers                flowers                   Jones

     fertile                  fertile                      ~

     fragrant      q3yy      fragrant      :e Jim<CR>      ~

     folly                         folly                                    ~

                                                                  Jim 1 line

                        Jones                           Jones

                        ~                                  fertile

                        ~                   qp             fragrant

                        ~                                  folly

                        Jim 1 line

 

// 숫자 버퍼는 교재를 참조하세요. (p 102)

 

(2) 문서를 중간 파일에 저장하는 방법 이용

문서를 포함하는 중간 파일을 이용하여 한 파일에서 다른 파일로

이동시킨다.

:n1, n2w filename<CR> : 지정된 filename에 n1에서 n2줄까지를 저장

즉 문서가 중간 파일로 저장되면 현재 파일에서

중간 파일을 불러올 수 있다.

Ex)

    flowers                               flowers                                     Jones

    fertile                                  fertile                                        ~

    fragrant            :2,4w if<CR>  fragrant                        :e Jim<CR>            ~

    folly                                    folly                                          ~

                                                if 3 lines                             Jim 1 line

 

                        Jones                           Jones

                        ~                                  fertile

                        ~               :r if<CR>   fragrant

                       ~                                  folly

                                                            if 3 lines

 

위에서는 :2,4w if<CR>은 if라는 중간 파일로 2에서 4까지의 줄을 저장한다.

:e Jim<CR>은 Jim이라고 지정된 파일을 편집한다.

:r if<CR>은 중간 파일을 읽어오기 위해 vi의 읽기 명령을 이용한다.

중간 파일은 삭제될 때까지 디렉토리에 남아 있는다.

  

5) vi 매크로

교재를 참조하세요.(p 104 ? 108)

 

 

% 이번 주 Report

   연습문제(p 109) 3-1, 3-2, 3-3 문제 풀어오기

다음시간에 공부할 4장 파일 시스템 정리해 오기(A4 3장 이상)