본문 바로가기

Dev/Dev:: Linux

[Day003] Linux 3일차 - vi 문서편집기

● 문서 편집기


   - console(CUI) : vi , emacs 등

      x-wondow(GUI) : gedit, kedit 등


 - [@~]vi                  vi문서편집기 실행


 - emacs 실행


 - vi 문서편집기

     1. vi 편집기 실행 

        ]# vi 파일명

           => vi 편집기로 화면이 전환되며 맨 마지막행은 상태를 표시하는 영역


 2. vi 편집기의 3가지 상태

         1) 직접명령모드 => 키보드를 눌러 명령을 실행하는 상태(기본)

              - 상태영역에 아무런 메세지가 없는 경우


         2) 간접명령모드 => 상태영역에 명령을 입력하여 실행하는 경우

              - 상태영역에 :이 표시되며 키보드를 누르면 상태영역에 메세지가 입력되는 경우


         3) 편집모드 => 키보드를 눌러 문서(파일)를 편집하는 경우

              - 상태영역에 "--INSERT--" 또는 "--REPLACE--" 라는 메세지가 있는 경우


3. 3가지 상태에 대한 변경 방법

                                  i                                    :

                           ←-------                       --------→

            편집모드                      직접명령모드                       간접명령모드

                           --------→                     ←-------- 

                                [esc]                     실행 -  명령입력 후 [Enter]      

                                                                    취소 - [esc] 


 4. 직접 및 간접명령모드에서 사용할 수 있는  vi 편집기 명령

          1) 편집모드 전환명령

              - i 또는 [Insert]를 누르면 편집모드("--INSERT--"모드)로 전환

              - [Insert]를 누르면 "--INSERT--" 또는 "--REPLACE--"모드로 전환

              - R : "--REPLACE--" 모드로 전환


          2) 커서 이동명령  

              :숫자     =>  숫자 해당하는 행으로 이동

            ※ 행번호(Line Number) 표시  =>   :set nu  

                행번호(Line Number) 삭제  =>   :set nonu 



3) 삭제 명령

                dd   -  커서가 있는 행을 삭제

             ※ 숫자dd  -  숫자만큼 dd 명령이 실행    


 4) 복사 및 붙여넣기

                yy  -  커서가 있는 행을 복사

                   ※ 숫자yy  -  숫자만큼 yy 명령이 실행 


                p  또는  P - 붙여넣기

                   ※ p - 커서가 존재하는 행의 아래로 붙여넣기

                       P - 커서가 존재하는 행의 위로 붙여넣기




    5) 다른 파일의 내용 붙여넣기

            :r 파일명   -  현재 커서가 존재하는 행의 아래로 다른 파일의 내용 붙여넣기


           6) 범위지정 => RHEL5에서는 적용되지 않는다.

                v를 누르면 "--VISUAL--" 상태로 전환 => 방향키를 눌러 범위를 지정

                   =>  범위 지정 후 y(복사), x(잘라내기), d(삭제) 실행

                ※ 마우스로 범위지정 후 마우스 3버튼(2개를 동시에 누름)을 누르면 키보드 커서가                     있는 곳에 붙여넣기가 된다.

                   => 편집모드 상태에서 실행


            7) 실행 취소

                u  - Undo


            8) 단어 검색

                :/단어   -  커서가 있는 아래로 단어 검색(대소문자 구분)

                n   -  다음 찾기 => 문서 마지막까지 검색이 끝나면 다시 처음부터 검색


            9) 단어 변경

                :범위s/바꿀문자/치환문자/gc

                ※ 범위 - 변경하고자 하는 행을 표현   형식) 시작행,마지막행 

                              ex) :5,10s/MBC/SBS/gc

                                    :%s/MBC/SBS/gc     => 문서 전체 변경


                 ※ 변경 옵션

                     g - 행 전체 적용 => 행에 변경하고하는 문자가 여러 개 있는 경우 모두 적용

                     c - 변경 유무 선택


            10) 저장 및 종료

                 :w    -  저장

                 :w 파일명   -  다른 이름으로 저장

                 :w!    -  강제 저장(읽기전용 파일인 경우) => 관리자 또는 파일 소유자 계정만 가능

                 :q   -  종료

                 :q!   -  강제 종료(변경된 내용을 저장하지 않고 종료) 

                 :wq   -  저장하고 종료

                 :wq!  -  강제 저장하고 종료(읽기 전용 파일인 경우)


              ※ 파일 불러오기

                 :e 파일명   -  파일 불러오기

                 :e! 파일명   - 강제 파일 불러오기(기존 파일을 저장하지 않고 다른 파일을 불러올                                     경우 사용)



4. vi 실행 시 비정상 종료에 의한 파일 손상 복구 방법


          => 비정상 종료인 경우 Swap 파일을 생성하여 손상을 최소화 한다.


         ]# vi aaa.txt

         sdgsg

         sdgsdgs

         sdgsd               =>  정상적인 방법으로 저장 및 종료


         ]# vi aaa.txt      =>  정상적인 파일인 경우 파일의 내용이 출력

         sdgsg

         sdgsdgs

         sdgsd   

         fghfgh              =>  추가되는 부분

         fghfgh          

         ^z                    => 비정상 종료 : 강제 중지(파일의 손상 발생) - swap 파일 발생(.aaa.txt.swp)


         ]# vi aaa.txt     =>  손상 파일인 경우 swp 파일의 내용이 출력

         sdgsg

         sdgsdgs

         sdgsd   

         fghfgh              => 복구 가능한 데이타만 출력 

         fghfgh              => 정상 종료


         ]# vi -r aaa.txt    =>  Swap 파일을 이용하여 원본파일로 복구

         sdgsg

         sdgsdgs

         sdgsd   

         fghfgh              

         fghfgh              => 정상 저장 및 종료      


         ]#  rm -rf .aaa.txt.swp     =>  Swap 파일 삭제