공부/Linux

09. VI 편집기

김대욱대욱 2018. 3. 19. 14:18

목표

1. vi 편집기 실행

2. vi 편집기 모드 변경


■ 현재 많이 사용되는 편집기 종류

vi 편집기 (Visual Editor)

 - 유닉스 계열에서 가장 많이 사용되는 편집기이다.

vim (vi improved)

 - vi 편집기와 호환되면서 다양한 기능을 추가하여 만든 편집기이다.

emacs 편집기 (Editor Macros)

 - 매크로 기능이 있는 텍스트 교정 및 편집기이다.


1. vi편집기 실행

 ▷ vi

  - emacs와 함께 유닉스 환경에서 가장 많이 쓰이는 문서 편집기이다.

  - 이름에서 알 수 있듯이 줄단위 편집기가 아닌 한 화면을 편집하는 비주얼 에디터 이다.

  - 버퍼에서 작업이 이루어 지며 저장 시키는 명령어를 입력해야 디스크 상에 파일의 내용으로 저장된다.

  - 명령어 형식

# vi : 새 파일을 편집할 수 있는 화면이 나온다.

# vi filename : filename 이름을 가진 파일이 존재하는 경우 해당 파일을 편집하고 없으면 새 파일을 편집할 수 있는 화면이 나온다.

# vi -R filename : 파일을 Readonly 상태로 열어준다.

# vi -r filename : 이전 vi 편집 작업 중 비정상적으로 작업이 끝난 경우 편집하던 파일 복구시에 사용된다.

# vi -L : 이전 vi 편집 작업 중 비정상적으로 작업이 끝난 경우 복구할 파일들에 대한 전체 목록을 볼 수 있다.

# vi +38 filename : 편집 작업에 들어갈 때 38번째 라인부터 시작


2. vi 편집기 모드 변경 (각 모드 별로 명령어를 외우고 있어야 빠른 편집기 사용이 가능하다.)

 ▷ 명령 모드(Edit Mode) 

  - 편집기 실행시 기본 모드이다.

  - <ESC>를 누르면 명령 모드로 간다.

    

  - 이동

좌우 이동 : (h, l), (w, b), (0(^), $)

상하 이동 : (j, k), (<CTRL + F>, <CTRL + B>), (H, L), (G, nG, 1G)


h : 한 문자 왼쪽으로 이동()

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

w : 한 단어 오른쪽으로 이동

b : 한 단어 왼쪽으로 이동

 

0(^) : 라인의 처음 문자(라인의 처음)으로 이동

$ : 라인의 마지막으로 이동

 

j : 한 문자 아래로 이동(), 다음 라인으로 이동

k : 한 문자 위로 이동(), 이전 라인으로 이동

 

<CTRL + F> : 다음 페이지로 이동

<CTRL + B> : 이전 페이지로 이동

 

H : 현재 페이지의 가장 첫번째 줄로 이동

L : 현재 페이지의 가장 마지막 줄로 이동

 

1G : 문서의 첫 번째 라인으로 이동

G : 문서의 마지막 라인으로 이동

  - 삭제

좌우 삭제: x, dw, (d0, d$), dd

상하 삭제: dd, 3dd, (:1,3d), (dG, d1G)


x : 현재 커서 한 글자 삭제

dw : 현재 커서 한 단어 삭제

d0 : 현재 커서부터 라인의 처음까지 삭제

d$ : 현재 커서부터 라인의 마지막까지 삭제

dd : 현재 라인 삭제

 

3dd : 현재 커서 라인을 포함해서 아래로 3개 라인 삭제

:1,3d : 1번째 라인부터 3번째 라인까지 삭제

 

dG : 현재 커서 라인부터 문서 마지막까지 삭제

d1G : 현재 커서 라인부터 문서 처음까지 삭제

  - Undo

u : 바로 이전에 상태로 되돌림

U : 라인 전체에 대해 이전 상태로 되돌림

  - Join Line

J : 현재라인에 아래 라인 붙이기

  - Replace

r : 현재 글자를 대치

R : <ESC>키를 누르기 전까지 현재 글자 대치


  - 검색/바꾸기(Search & Replace)

:%s/<찾을문자열>/<바꿀문자열>/g

ex) 5, 10s/Old/New/g                 /* 5번째 라인에서 10번째 라인까지 Old문자열을 New문자열로 바꾼다.*/


※ 유용하게 사용되는 것들

5,10s/^/#/                               /* 5번째 라인에서 10번째 라인까지 주석처리(Comment) */

5,10s/^#//                               /* 5번째 라인에서 10번째 라인까지 주석해제(Uncomment) */

 

5,10s/^/    / (4 blank character)       /* 5번째 라인에서 10번째 라인까지 들여쓰기 */

5,10s/^    //                             /* 5번째 라인에서 10번째 라인까지 내어쓰기 */


 ▷ 입력 모드(Insert Mode)

  - 키 입력을 파일에 입력

  - 편집기 실행시 기본 모드는 명령행 보드이다. 명령행 모드에서 입력을 하기 위해서는 입력행 모드로 전환 해야한다.

  - 편집기에 뭔가를 입력하려면 입력행 모드로 전환하고 입력해야한다.

  - a, A, i, I, o, O

  - 입력(Insert)

i : 현재 커서 위치로부터 입력한다.

I : 현재 커서가 있는 행의 처음부터 입력한다.

  - 첨부(Append)

a : 현재 커서 위치 이후부터 입력한다.

A : 현재 커서가 있는 행의 마지막부터 입력한다.

  - Open Line

o : 현재 커서가 있는 아래행부터 입력한다.

O : 현재 커서가 있는 위행부터 입력한다.

 

 ▷ 최하위행(라인) 모드 (Last Line Mode)

  - 복사/붙이기(Copy/Yank & Paste)

yy : 현재 라인 복사(Yank)

3yy : 현재 커서 라인 포함해서 하위의 3개의 라인 복사

:1,3 co 5 : 첫 번째 라인부터 3번째 라인까지 복사하여 5번째 라인 아래에 붙이기

:1,3 m 5 : 첫 번째 라인부터 3번째 라인까지 5번째 라인 아래에 이동하기


p : 현재 커서 아래에 붙이기

P : 현재 커서 위에 붙이기

  - 검색(Search)

/New : 현재 커서 라인부터 찾을려는 문자열(: New) 검색

?New : 문서의 마지막 라인부터 찾을려는 문자열(: New) 검색


n : n(Next), 정방향다음번째 검색

N : N(Next), 역방향으로 다음번째 검색

  - 저장 & 종료 (Save & Quit)

:w                            /* w(write), 현재 파일에 저장 하기 */

:w filename                  /* 다른 이름으로 저장 하기 */

:w!(root use)                /* 현재 파일에 강제적으로 저장 하기 */

:w! file                        /* 현재까지의 변경사항을 file로 저장 */

:3,10w file                     /* 3번째 라인부터 10번째 라인까지 file로 저장 */

:q                              /* q(quit), 편집기 종료 */

:q!                             /* 저장 안하고 편집기 종료 */

:wq                            /* 저장하고 편집기 종료 */

:wq!(root Use)                /* 현재 파일에 강제적으로 저장하고 편집기 종료 */

:r file                           /* file의 내용을 현재 커서 위치에서 읽어 들임 */

:!CMD                          /* vi 편집기를 빠져나가지 않은 상태에서 쉘 명령어를 수행 */


※ 저장하고 빠져나가기 여러가지 방법

:x

:wq

ZZ


 

①번이 명령행 모드 ② 입력행 모드 ③ 최하위행 모드

① 명령행 모드는 vi를 실행했을때 처음 기본모드 

② 입력행 모드로 전환됬을때 하단에 insert가 나온다.

③ 최하위행 모드는 최하단에 명령어를 입력하고 있는것이 보일 것이다.


 ※ VI 편집기 환경 설정

  - 동작하는 기능을 변경하기 위해서는 set 명령어를 사용한다.

  - set 명령어 다음에 all을 사용하면 현재 편집기에서 사용가능한 모든 기능변수들에 대한 현재 설정값을 표시한다.

  - 최하위행 모드에서 사용한다.

: set all           (Last Line Mode)

: set number     (: set nu)          /*라인 번호 달기*/

: set nonumber  (: set nonu)       /*라인 번호 지우기*/

: set tapstop = 4  (: set ts=4)        /*탭간격 4칸 들여쓰기*/

: set noshowmode                   /*상태표시행에 모드를 표시하거나 표시하지 않거나를 설정*/

: set directory=/tmp                  /*지정된 기능 변경*/