리눅스 vi 편집기 사용법

VI란?

유닉스에서 VI가 어떤 역할을 하는 프로그램일까 궁금해 한다면, DOS에서 사용하는 Q에디터(q.exe)나 edit.com과 같은 존재이고, 윈도우9x에서는 메모장(notepad.exe)과 같은 역할을 하는 유틸리티(Utility)라고 할 수 있다.

VI는 유닉스운영체제에서 가장 기본적이고 심지어 유일하다고 말할수도 있는 Editor이기 때문이다.

UNIX시스템에서 편집기(Editor)는 일반적으로 Line Editor와 Screen Editor의 두 부분으로 크게 나눈다. 전자(라인에디터)의 예로는 ed와 ex가 있고, 후자(스크린에디터)는 vi편집기를 예로 들수 있겠다. ed나 ex의 경우는 기회가 있으면 살펴보기로 하고 여기서는 스크린에디터에 속하는 VI만을 다루기로 한다.



명령모드(Command Mode) 와 편집모드(Edit Mode)의 의미

   : ESC 키를 사용해서 명령모드와 편집모드가 서로간 반전



VI프로그램의 위치

$ which vi

/usr/bin/vi

/usr/ucb/vi

/bin/vi




VI를 이용한 파일 열기

# vi [파일명]



========= 명령모드 ==========================================



화면을 이동하는 법

h : 앞으로 이동

l  : 뒤로 이동

k : 위로 이동

j  : 아래로 이동

방향키 자체는 vi자체에서 지원하는 키가 아니라 텔넷프로그램(새롬데이터맨)이 지원해주는 가짜 키임을 유의.



화면단위로 이동하는 법

Ctrl + f(Forward)   : 한페이지 앞으로(아래로)

Ctrl + b(Backward)  : 한페이지 뒤로(위로)

Ctrl + u(Up)     : 1/2페이지 위로 이동

Ctrl + d(Down)    : 1/2페이지 아래로 이동

PageUp키나 Pagedown키를 눌러 이동하면 안됨



행내에서의 이동

Shift + 4(== $ ) : 행의 맨뒤로

Shift + 6(== ^ ) : 행의 맨앞으로

HOME키나 END키를 사용해선 안됨



특정행으로 자유롭게 이동

1 + Shift + g( == 1 + G )    : 파일의 처음(1행)으로 이동하기

Shift + g( == G )       : 파일의 마지막행으로 이동하기

특정숫자 + Shift + g( == ? + G ) : 특정라인으로 이동하기



삭제 기능

x       : 한글자 지우기(윈도우의 Delete키 기능)

X       : 한글자 지우기(윈도우의 Backspace키 기능)

dd      : 한줄지우기

특정숫자 + dd : 여러개의 라인 지우기

D      : 현재라인 현재행의 뒷부분 모두 지우기(하나의 행)



Copy & Paste 기능

yy      : 하나의 행 복사하기

특정숫자 + yy : 여러개의 행 복사하기

p       : 붙이기

Shift + j(== J ) : 윗줄의 맨뒤에 아랫줄 갖다가 붙이기(커서의 위치는 윗줄에 있어야 함)



검색하고 치환하는 기능



/[찾는문자열]       : 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(아래방향으로)

?[찾는문자열]       : 파일내에서 찾는 문자열을 찾아 커서가 이동한다.(위로 향하여)

n             : “/찾는문자열”을 입력후 다음찾기할때(아래방향)

N             : “/찾는문자열”을 입력후 다음찾기할때(위방향)



:s/찾는문자열/치환문자열 : 현재 커서가 놓여 있는 행에서 첫번째로 검색된 특정문자열 바꾸기:1,10s/찾는문자열/치환문자열

  – 1행부터 10행사이에 걸쳐 첫번째로 검색된 특정문자열 바꾸기

:%s/찾는문자열/치환문자열 : 모든행에 걸쳐 첫번째로 검색된 특정문자열을 바꾸기



치환문에서 /g의 차이

예)

drwxrwxrwt 7 sys sys 363 12월25일 02:41 tmp/



실행문)

:s/sys/root

:s/sys/root/g



실행결과)

drwxrwxrwt 7 root sys 363 12월25일 02:41 tmp/

drwxrwxrwt 7 root root 363 12월25일 02:41 tmp/



========= 명령모드 ==========================================



명령모드에서 벗어나 편집모드로 진입하기(입력모드)

i       : 커서가 놓여 있는 위치의 문자를 밀어내고 삽입된다.

a       : 커서가 놓여 있는 위치의 문자뒤에 삽입된다.

o (소문자 o)  : 현재행의 아래행을 밀어내고 입력모드로 전환된다.

O (대문자 O) : 현재행을 한줄 아래로 밀어내고 입력모드로 전환된다.



입력모드 와 삽입모드를 습관적으로 변환하기

입력모드 : ESC – 명령모드(이동,삭제,검색,치환,저장,종료,열기)

명령모드 : i,a,o,O – 삽입모드(입력)



vi 방식의 종료와 저장, 새이름으로 저장

:q      – 저장하지 않고 vi 종료하기

:q!     - 강제 종료

:w     - 현재내용을 저장

:w!     - 읽기전용인 파일을 수정후 강제로 저장할때

:wq     - 저장하고 종료

:wq!     - 읽기전용인 파일을 수정후 강제로 저장하고 종료하기

:w 새파일명 – 새이름으로 저장



vi 환경설정



:set number      : 행번호 보이게

:set nonumber   : 행번호 안보이게

:set autoindent   : 들여쓰기 설정

:set noautoindent : 들여쓰기 제거

:set list           : 문단,조판부호 보기

:set nolist         : 문단,조판부호 안보이게

:set window=30   : 한 화면당 행의 갯수 30개로 지정

:set ignorecase   : 검색시 대소문자 구별 제거

:set noignorecase : 검색시 대소문자 구별

:set all           : 현재 설정된 vi 모든 설정값 보기