ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VI 편집기 사용하기
    Linux 2010. 11. 25. 17:55
    반응형

    1.vi편집기란?
    vi는 visual의 약자로 유닉스의 표준 편집기이다. ex라는 editor를 바탕으로 만들어진 스크린 편집
    기로, 프로그램의 사이즈도 작고 기능이 많다. 윈도우의 editor에 익숙한 사용자에겐 불편하게 느껴
    지겠지만, 아주 편리한 환경과 막강한 기능을 제공하는 편집기이다.
    (참고) vi는 full screen editor이므로 정확한 단말기 특성이 /etc/termcap안에 있어야 하며, 환경
          변수 $TERM이 정확히 정의되어 있어야 한다.

    2.vi 편집기 시작하기
    (1) 사용법
       vi [option] [filename]
    (2) option
       -c  : -c옵션은 시작하면서 어떠한 명령을 실행한다.
       -r  : 손상된 파일을 복구할 때 쓴다. 파일을 편집하던 중 갑작스런 사고 등으로 인해 시스템이
            다운되었을 경우 대개 이 명령으로 복구 할 수 있다.
       +n  : 파일을 열면서 n번째 줄로 커서를 이동시킨다.
       +   : 파일을 열면서 마지막 줄에 커서를 이동시킨다.
       -wn : 기본적인 윈도우 크기를 n라인으로 한다.(기본값은 20라인)
    (3) 사용예
       1) vi                 
           => 빈문서로 시작한다.
       2) vi index.html      
           => 주어진 파일(index.html) 이름으로 편집을 시작한다. 만약 파일이 존재하지 않으면 새로
             만들게 된다.
       3) vi +15 index.html   
           => index.html 파일을 열면서 커서를 15번째 줄로 보낸다.
       4) vi -c 15 index.html 
           => -c옵션은 시작하면서 어떠한 명령을 실행하라는 뜻이다. 따라서, -c 15 라고 쓰면 +15
             옵션과 동일한 결과를 얻는다.
       5) view index.html     
           => index.html파일을 읽기 전용으로 파일을 연다. 참고로 저장할 때 ':wq!'형식으로 ! 표를
             붙이면 읽기전용이라도 저장된다
       6) vi + index.html     
           => index.html파일을 열면서 커서의 위치를 마지막라인에 둔다.
       7) vi +/posein /etc/passwd
           => /etc/passwd 라는 파일을 열면서 posein이라는 문자열이 있는 위치에 커서를 둔다.

    3. vi 종료하기
    (1) 설명: 모드에 대한 설명이 아래에 나오지만 미리 종료에 대해 설명하면 일단 [ESC]키를 눌러
              명령모드로 전환한 후, 필요에 맞게 다음 중 하나의 키워드를 사용하면 된다.
    (2) 명령
       :wq => 파일을 저장한 후 종료한다. 같은 명령으로는 ZZ 또는 :x 가 있다.
       :q! => 편집하여 변경된 내용을 저장하지 않고 강제 종료한다.
       :q  => 편집중인 내용이 없는 경우, vi를 종료한다.
       :w  => 편집중인 파일 내용을 저장한다. vi는 종료하지 않는다.

    4. vi편집기의 모드
    (1) 설명: vi편집기에는 크게 2가지모드로 구분된다. 첫번째는 명령모드(command mode)이고, 두번째
              는 입력모드(input mode)또는 편집모드라고 한다. 또 명령모드는 다시 일반명령모드와
              ex명령모드로 구분된다. 명령모드상태에서 입력명령(i,I,a,A,o,O)을 실행하면 입력모드로
              전환된다. 입력모드에서 타이핑한 문자들이 문서에 삽입된다. 여기에서 다시 [ESC]키를
              누르면 명령모드로 돌아온다. 명령 모드에서 ':'를 입력하면 화면 아래쪽에 ':'라는 프롬
             프트가 나타나게 되는 데 이것이 ex명령모드이다.
    참고)입력모드 키워드가 위 나열한 것외에 (c,C,s,S,R)등이 있다.

    (2) 모드
       1) 명령모드 : vi라고 입력한뒤 처음 접하는 모드
        ㄱ. 커서 이동 명령
           h           : 왼쪽으로 이동
           j           : 아래로 이동
           k           : 위로 이동
           l           : 오른쪽으로 이동
           w           : 다음 단어의 처음으로 이동
           -           : 앞 라인의 첫문자로 이동
           ^           : 라인의 첫 문자로 이동
           $           : 라인의 맨 끝으로 이동
           +           : 다음 라인의 첫문자로 이동
           0(zero)     : 첫번째 열로 이동
           G           : 제일 끝줄로 이동
           nG          : n번째 행으로 이동
           gg          : 파일의 처음으로 이동
           (           : 문장의 처음으로 이동
           )           : 다음 문장의 처음으로 이동
           {           : 문단(paragraph)의 처음으로 이동
           }           : 다음 문단의 처음으로 이동
           H           : 화면의 첫 라인으로 이동
           M           : 화면의 중간으로 이동
           L           : 화면의 끝라인으로 이동
           ctrl+b(back)    : 한 화면 위로 이동
           ctrl+f(forward) : 한 화면 아래로 이동
           ctrl+u(up)      : 반 화면 위로 이동
           ctrl+d(down)    : 반 화면 아래로 이동
           e           : 한 단어 뒤로 이동
           b           : 한 단어 앞으로 이동
           :0(zero)     : 줄의 제일 처음으로 이동
           :$           : 줄의 제일 끝으로 이동
        ㄴ. 편집상태로 진입 : 입력모드로 전환하는 키워드이고 하단에 'INSERT' 등과 같은 문자열이
                             표시된다.
           i   : 현재 커서 위치에 삽입
           a   : 현재 커서 위치 다음에 삽입
           o   : 현재 커서가 위치한 줄의 아랫줄에 삽입
           I   : 현재 커서가 위치한 줄의 제일 앞에 삽입
           A   : 현재 커서가 위치한 줄의 제일 뒤에 삽입
           O   : 현재 커서가 위치한 줄 위에 삽입
           ESC : 명령모드로 재전환
        ㄷ. 복사하기와 붙이기
           Y     : 현재 커서가 위치한 줄을 버퍼에 복사한다.
           yy    : Y와 같다.
           yw    : 현재 커서가 위치한 단어를 버퍼에 복사한다.
           'n'Y  : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 버퍼에 복사한다.
           'n'yy : nY와 같다.
           'n'yw : 현재 커서가 위치한 단어로 부터 뒤로 n개의 단어를 버퍼에 복사한다.
           yh    : 커서의 왼쪽 문자를 복사한다.
           yl    : 커서가 위치한 문자를 복사한다.
           yB    : 커서의 왼쪽 비공백 단어를 복사한다.
           yW    : 커서의 오른쪽 비공백 단어를 복사한다.
           y0    : 커서 왼쪽부터 라인의 처음까지 복사한다.
           p     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.
           P     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.
        ㄹ. 지우기
           x     : 현재 커서 위치의 문자를 지운다.(dh와 동일)
           X     : 커서 왼쪽의 문자를 지운다.(dl과 동일)
           dd    : 현재 커서가 위치한 줄을 지운다. (단어 뒤의 스페이스 포함)
           'n'dd : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 지운다.
           dw    : 현재 커서가 위치한 단어를 지운다.
           db    : 현재 커서의 왼쪽 단어를 지운다.
           'n'dw : 현재 커서가 위치한 단어로 부터 뒤로 n개 만큼의 단어를 지운다.
           dB    : 현재 커서 왼쪽 비공백 단어를 지운다.
           dW    : 현재 커서 오른쪽 비공백 단어를 지운다.
           d$    : 현재 커서가 있는 라인부터 끝까지 지운다.(D와 동일)
           - d0  : 커서 왼쪽부터 라인의 처음까지 지운다.
        ㅁ. 바꾸기
           r    : 현재 위치의 문자를 바꾼다.
           R    : 현재 커서 위치부터 원하는 만큼 다른 문자로 바꾼다.
           cb   : 현재 커서 왼쪽 단어를 바꾼다.
           cw   : 현재 위치의 단어를 바꾼다.
           cc   : 현재 커서가 위치한 줄을 바꾼다.
           c$   : 커서부터 라인의 끝까지 바꾼다.(C와 동일)
           c0   : 커서 왼쪽부터 라인의 처음까지 바꾼다.
           C    : 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.
          'n'cw : 현재 위치로부터 'n'개의 단어를 바꾼다.
          'n'cc : 현재 위치로부터 'n'개의 줄을 바꾼다.
        ㅂ. 기타
           ctrl+g   : 현재 편집하고 있는 파일의 정보를 보여준다.
           shift+v  : 블록을 지정한다.
           u        : 방금 한 명령을 취소한다.
           U        : 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.
           .        : 방금한 명령을 되풀이 한다.
           'n'.     : 방금한 명령을 n번만큼 되풀이 한다.
           J        : 현재 줄과 다음 줄을 합한다.
           ZZ       : 현재 내용을 저장하고 끝낸다.
           /exp     : 'exp'와 같은 내용을 현재 위치 다음부터 찾는다.
           ?exp     : 'exp'와 같은 내용을 현재 위치부터 위쪽으로 찾는다.
           n        : 앞에서 찾은 내용을 현재 위치 다음부터 찾는다.
           N        : 앞에서 찾은 내용을 반대 방향으로 계속 찾는다.
           >>       : 현재 커서 위치 줄을 오른쪽으로 한 열씩 이동한다.
           <<       : 현재 커서 위치 줄을 왼쪽으로 한 열씩 이동한다.
           ~        : 현재 커서가 위치한 문자의 대소문자를 서로 변환한다.
           ctrl+l   : 화면 다시 그린다.
           !        : vi편집중에 shell명령을 내린다.
       3) ex명령모드 : ex란 초기 유닉스에서부터 쓰이던 line editor이다. vi는 자체 명령어외에
                      ex편집기 명령어를 지원한다. 명령모드에서 ':'누르면 화면 아래쪽에 ':'라는
                      프롬프트가 나타나면서 ex명령모드로 들어간다.
        ㄱ. 명령
           :w              => 현재 내용을 저장한다.
           :w filename     => 현재 내용을 지정된 파일 이름으로 저장한다.
           :w!             => 강제로 덮어쓰기를 한다.
           :q              => 그냥 종료한다. 약간이라도 변경사항이 있으면 종료안된다.
           :wq             => 현재 내용을 저장하고 종료한다.
           :wq filename    => filename 으로 저장하고 종료한다. 새이름으로 저장할 때 쓴다.
           :q!             => 현재 내용을 저장하지 않고 종료한다.
           :e filename     => 새로운 파일을 편집한다.
           :r filename     => 현재 커서 위치 다음에 파일을 읽어 삽입한다.
           :14 r filename  => 14행 이후에 파일을 읽어 삽입한다.
           :10             => 10번째 줄로 커서를 이동시킨다.
           :10, 20d        => 10번째 행에서 20번째 행까지 지운다.

         (참고) 줄 번호를 쓸 때 '.'는 현재 줄을, '$'는 끝줄을 의미하므로 ':3,$d'는 3번째행에서
               끝행까지 지운다는 의미가 된다. 또 첫줄부터 현재 커서가 위치한 줄까지를 지우려면
               ':1,.d'라고 쓰면 된다.

        ㄴ. 문자열의 치환
          :s/문자열/새문자열       => 커서가 위치하고 있는 줄의 첫번째 해당문자열을 새문자열로
                                     치환한다.
          :s/문자열/새문자열/g     => 커서가 위치하고 있는 줄의 모든 해당문자열을 새 문자열로 치
                                     환한다.
          :1,$ s/문자열/새문자열/g => 파일 전체에 대해 해당문자열을 새문자열로 치환한다.
                                    :%s/문자열/새문자열/g 와 같다.

    5. vi편집기의 환경설정
    (1) 설명 : vi환경설정을 위해서는 명령모드에서 :set을 사용한다.
    (2) 사용법
       1) 설정
         set [환경변수][=값]
       2) 해제
         set no환경변수
    (3) 환경변수
       1) ignorecase : 문자열을 검색할 때 대소문자에 관계없이 검색한다.
       2) number     : 행의 앞에 행번호를 붙여준다. 약자로 'nu'라고 해도 된다.
       3) autoindent : 라인변경시 커서의 위치를 바로 위라인의 수준과 같이 해준다. 프로그램작성시에
                     용이하다. 약자로 'ai'라고 해도 된다.
       4) showmatch  : '}'또는 ')'를 입력하였을 경우 짝이되는 '{','('를 찾아 커서가 1초동안 머무르
                     다 돌아온다. 이 기능은 C등의 프로그램을 작성할 때 편리하다. 약자로 'sm'이라고
                     해도 된다.
       5) showmode   : 화면 아래쪽에 현재 모드를 표시한다. 즉 편집모드인 경우에 'INSERT'등의 값으
                      로 표시해준다. 기본값으로 설정되어 있다.
       6) tabstop    : 탭의크기를 표시한다. '=n'를 붙이면 탭의크기를 n값에 따라 부여할 수 있다.
    (4) 사용예
       1) :set 
           => 여러가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경변수를 보여준다.
       2) :set nu
           => 행의 앞에 행번호를 표시한다. ':set number'와 같다.
       3) :set nonu
           => 행의 앞에 붙은 행번호 표시를 없앤다.
       4) :set ai
           => [Enter]키를 입력하면 행을 바꾸었을 경우 위 줄과 같은 열에 커서를 위치시킨다.
       5) :set noai
           => 'ai'설정을 해제한다. ':set noautoindent'와 같다.
       6) :set ignorecase
           => 명령모드에서 문자열을 검색시에 대소문자를 구분하지 않는다. 즉 '/linux'라고 입력하면
             linux, Linux, LINUX 등의 모든 문자열을 찾아준다.
       7) :set noignorecase
           => 검색시에 대소문자를 구분하도록 한다.
       8) :set tabstop
           => 현재 설정된 탭의 크기(기본값은 4)를 보여준다.
       9) :set tabstop=8
           => 탭의 크기를 10으로 바꾼다.
       10) :set noshowmode
           => 리눅스에서는 기본적으로 모드를 표시해준다. 즉 입력모드인 경우에는 화면하단에INSERT
             등을 표시해준다. 위와 같이 명령을 내리면 모드전환을 해도 표시해주지 않는다.
    (5) 관련파일 : .exrc
       1) 설명: set명령을 사용자의 홈 디렉토리의 .exrc(또는 .vimrc)안에 써 놓으면 vi가 시작될 때
              디폴트로 설정되어 시작하게 된다.
       2) 사용법
         set [환경변수] [값]
       3) 사용예
         [posein@www posein]$ cat .exrc
         set nu
         set ai
           => vi편집기 실행할 때마다 각 행 앞에 행번호를 붙여주고 autoindent를 적용한다. ':'는
             적지 않는다.

    반응형

    'Linux' 카테고리의 다른 글

    리눅스 타임서버 설정  (0) 2010.11.25
    eth0, eth1 바꾸기  (0) 2010.11.25
    VSFTP 설정  (0) 2010.11.25
    Iptables로 기본적인 firewall 구축하기  (0) 2010.11.25
    유닉스 및 리눅스 명령어 팁  (0) 2010.11.25

    댓글

Designed by Tistory.