본문 바로가기

Linux

vi에디터 명령어

어렸을때 486컴퓨터에서 게임하려고 발악하며 배운 도스명령어는 죽어도 안까먹어지는데...

리눅스는 왜케 어려운겨...특히 vi에디터...하루지나면 플레쉬 메모리처럼 까먹으니...ㅠㅅㅠ


vi 에디터의 세가지 모드


1. 명령어 모드


파일의 편집 작업을 한다 즉, 글자를 지우고, 바꾸고, 복사하고, 다른 곳으로 옮기고, 글자를 찾고, 찾을 글자를 바꾸는 작업을 명령어 모드에서 한다.


2. 삽입 모드


삽입 모드가 아닌 다른 모드에서는 글을 입력할 수 없다. vi 명령어는 먼저 명령어 모드로 실행되므로, 명령어 모드에서 삽입 모드로 오기 위해서는 명령어를 따로 입력해야 한다. 이 떄 입력하는 명령어에 따라서 커서를 기준으로 어느 곳에 글을 입력할지 결정된다.


3. ex 모드(마지막 행 모드)


명령어 모드에서 사용할 수 없는 강력한 검색 치환 기능과 vi 에디터 설정 기능이 있다.


vi 에디터 실행 방법


vi 명령어 다음에 편집할 파일의 이름을 적으면 된다. 이때 명시하는 파일이 존재할 경우는 그 파일을 읽어서 편집하고, 파일이 존재하지 않으면 파일을 새로 만들게 된다.


vi 필수 명령어

 

1. 이동 명령어

 

단순히 커서의 위치만 옮기고 파일의 내용은 전혀 변경하지 않는다.

 

내용

h

커서를 현재 위치에서 왼쪽으로 한 글자 옮긴다.

j

커서를 현재 위치에서 한 라인 아래로 옮긴다.

k

커서를 현재 위치에서 한 라인 위로 옮긴다.

l

커서를 현재 위치에서 오른쪽으로 한 글자 옮긴다.


2. 편집 명령어

 

글자를 추가하거나, 기존에 있는 글자를 삭제할 경우에 사용하는 명령어이다. 입력한 내용을 명령어가 아닌 파일에 입력하는 데이터로서 인식하여 ESC를 누를때까지 입력한 모든 내용이 화면에 출력된다. 글자를 지우는 명령어를 사용하면 지운 글자는 임시 레지스터에 저장된다.

 

내용

i

현재 커서가 있는 곳에 글자를 ESC를 누를 때까지

입력한 글자를 추가한다(insert).

x

현재 커서가 있는 곳의 글자를 지운다.


3. 종료 명령어

 

내용

:w

현재 편집하는 파일을 저장한다(write).

:w!

현재 편집하는 파일을 강제로 저장한다.

:q

현재 편집하는 파일을 닫고 vi 에디터를 종료한다(quit).

:wq

현재 편집하는 파일을 저장하고 vi 에디터를 종료한다(write & quit).

:zz

현재 편집하는 파일을 저장하고 vi 에디터를 종료한다.

 

 vi 기본 명령어

 

1. 이동 명령어

 

내용

w

커서를 우측 단어의 첫 글자로 옮긴다(Word).

W

커서를 우측 단어의 첫 글자로 옮긴다. 단, 단어는 공백으로만

나뉜다(Word).

e

커서를 우측 단어의 끝 글자로 옮긴다(End of word).

E

커서를 우측 단어의 끝 글자로 옮긴다. 단, 단어는 공백으로만

나뉜다(End of word).

b

커서를 좌측 단어의 첫 글자로 옮긴다(Backward).

B

커서를 좌측 단어의 첫 글자로 옮긴다. 단, 단어는 공백으로만

나뉜다(Backward).

→ vi 명령어의 단어 단위의 커서 이동 명령어

 

내용

0

커서를 라인의 첫 글자로 옮긴다.

^

커서를 공백을 나타내는 글자를 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다.

$

커서를 라인의 끝 글자로 옮긴다.

-

커서를 한 라인 위로 옮기되, 공백을 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다.

+

커서를 한 라인 아래로 옮기되, 공백을 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다.

H

커서를 화면의 첫 라인으로 옮기되, 공백을 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다. 파일의 첫 라인이 아니라 현재 보이는 화면의 첫 라인으로 옮긴다는 점에 유의해야 한다(High).

M

커서를 화면의 중앙 라인으로 옮기되, 공백을 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다. 파일의 중간 라인이 아니라 현재 보이는 화면의 중간 라인임에 유의하자(Middle)

L

커서를 화면의 마지막 라인으로 옮기되, 공백을 제외한 나머지 글자 중에서 라인의 첫 글자로 옮긴다. 파일의 제일 마지막 라인이 아니라 현재 보이는 화면의 마지막 라인임에 유의하자(Low).

nG

숫자 n이 명시된 경우는 파일의 n번째 라인의 공백이 아닌 첫 글자로 커서를 옮기고, n이 명시되지 않은 겨우는 파일의 마지막 라인의 공백이 아닌 첫 글자로 옮긴다.

→ vi 명령어의 라인 또는 화면 단위의 커서 이동 명령어

 

2. 편집 명령어

 

 

내용

a

커서의 우측에 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Append).

A

현재 라인의 맨 끝에 ESC를 입력할 때까지 입력한 모든 글자를 추가한다. 숫자 n을 명시하면 n번 반복해서 입력한다(Append)

I

현재 라인의 공백이 아닌 첫 글자 앞에서 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Insert).

o

현재 라인 밑에 새로운 라인을 열고 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Open).

O

현재 라인 위에 새로운 라인을 열고 ESC를 입력할 때까지 입력한 모든 글자를 추가한다(Open).

X

현재 커서의 왼쪽 글자를 지운다.

dpos

현재 커서부터 pos로 명시한 이동 명령어로 명시한 곳까지 글자를 지운다. 이동 명령어는 어떠한 것이 와도 상관없이, 그 명령어의 의미가 나타는 곳까지 글자를 지운다. 따라서 조합할 수 있는 명령어는 dh,dj,dk,dl,dw,db,de,dW,dB,dE,dH,dM,dL,d0,d^,d$,d-d,+,d_,d| 등 헤아릴 수 없이 많은 명령어를 만들 수 있다(Delete).

dd

현재 커서가 위치한 라인을 지운다(Delete).

D

현재 커서가 위치한 곳부터 라인의 끝까지 지운다. 앞에 숫자 n이 명시된 경우 현재 라인의 끝까지 지우고 추가로 커서 아래에 있는 n-1 개의 라인을 지워서 레지스터에 넣는다(Delete).

cpos

현재 커서부터 pos로 명시한 이동 명령어로 명시한 곳까지 글자를 다른 글자로 대체한다. 이동 명령어는 어떠한 명령어가 와도 상관없이 그 명령어가 나태는 곳까지의 글자를 없애서 레지스터에 넣고 ESC을 입력할 때까지 입력한 모든 내용으로 대체한다. 따라서 조합할 수 있는 명령어는 ch,cj,ck,cl,cw,db,ce,cW,cB,cE,cH,cM,cL,c0,c^,c$,c-,c+c_,c| 등 헤아릴 수 없이 많은 명령어를 만들 수 있다(Change).

cc

현재 커서가 있는 라인 전체를 ESC를 입력할 때까지 입력한 다른 글자로 대체한다. 다른 글자로 대체된 원래의 글자들은 레지스터에 저장된다(Change).

C

현재 커서가 위치한 곳부터 라인의 끝까지를 ESC를 입력할 때까지 입력한 글자로 대체한다.

s

현재 커서가 위치한 한 글자를 ESC를 입력할 때까지 입력한 다음 글자로 대체한다(Substitute).

S

현재 커서가 있는 라인 전체를 ESC를 입력할 때까지 입력한 다음 글자로 대체 한다(Subsutitute).

r

커서가 위치한 곳의 글자를 다른 하나의 글자로 대체한다(Replace).

R

커서가 위치한 곳부터 우측으로 가면서 글자를 대체하는데 ESC를 누를때까지 입력한 개수만큼 기존의 글자가 새로운 글자로 대체된다(Replace).

~

커서에 있는 글자의 대소문자를 서로 바꾼다. 즉 ~를 누를 때마다 커서의 우측으로 옮기면서 커서에 있는 글자가 소문자일 경우는 대문자로, 대문자인 경우는 소문자로 바꾼다.

.

가장 마지막에 실행한 편집 명령어를 똑같이 반복한다.

J

커서가 있는 라인부터 아래 하나의 라인으로 연결한다. 이때 연결되는 각 라인은 공백으로 띄워진다(Join).

ypos

커서가 있는 위치부터 pos로 명시한 이동 명령어가 나타내는 곳까지 복사해서 레지스터에 저장한다. 레지스터의 이름을 명시하지 않으면 임시 레지스터에 저장된다(Yank).

yy

Y

커서가 있는 라인의 데이터를 복사한다.

p

마지막으로 지우거나 복사한 데이터를 읽어서 커서의 우측에 데이터를 추가한다(Paste).

P

마지막으로 지우거나 복사한 데이터를 읽어서 커서의 좌측에 데이터를 추가한다(Paste).

u

마지막에 실행한 편집 명령어를 하나를 취소한다(Undo).

U

현재 커서가 있는 라인이 변경이 된 후에 이동을 하지 않았다면 현재 라인을 원상 복구한다(Undo).


3. 화면을 움직이는 명령어

 

내용

Ctrl+e

한 라인을 위로 올린다.

Ctrl+d

한 라인을 위로 올린다(Downward).

Ctrl+f

한 페이지를 위로 올린다(Forward).

Ctrl+y

한 라인을 아래로 내린다.

Ctrl+u

한 라인을 아래로 내린다(Upward).

Ctrl+b

한 페이지를 아래로 내린다(Backward).


 4. 검색 명령어


내용

/pattern

/ 다음에 찾고자 하는 글자의 정규식을 사용해서 패턴 형태로 입력하면 커서의 우측 아래쪽 방향으로 패턴을 찾는다.

?pattern

? 다음에 찾고자 하는 글자의 정규식을 사용해서 패턴 형태로 입력하면 커서의 좌측 위쪽 방향으로 패턴을 찾는다.

n

가장 마지막으로 실행한 검색 명령어를 똑같은 방향으로 실행한다. 마지막 검색이 우측일 경우(/를 사용한 경우)는 우측으로, 좌측일 경우(?를 사용한 경우)는 좌측으로 패턴을 찾는다(Next).

N

가장 마지막으로 실행한 검색 명령어를 반대 방향으로 실행한다. 마지막 검색이 우측일 경우(/를 사용한 경우)는 좌측으로, 좌측일 경우(?를 사용한 경우)는 우측으로 패턴을 찾는다(Next).


5. 기타 명령어

 

내용

:q!

현재 편집하는 파일을 저장하지 않고 vi 에디터를 종료한다.

:e filename

filename 파일을 읽어서 편집한다.

:r filename

현재 편집하는 파일 내부에 filename 을 읽어들여 첨가한다.


vi 기타 명령어

 

vi 설정 명령어

 

밑의 명령어를 vi 에디터를 실행할 때마다 적어넣기 불편하므로 vi 에디터의 설정을 저장한 파일

즉, ~/.exrc 파일에 자신에게 적합한 설정 사항을 넣어 두면 매번 따로 설정하는 불편함이 사라진다.

  

내용

:set nu

각 라인 앞에 라인 번호를 붙인다(NUmber).

:set nonu

각 라인 앞에 라인 번호를 붙이지 않는다(NO NUmber).

:set ic

패턴을 찾을 때 대소문자를 구별하지 않는다(Ignore Case).

:set noic

패턴을 찾을 때 대소문자를 구별한다(NO Ignore Case).

:set showmode

현재 vi 에디터의 상태를 나타낸다.

:set noshowmode

현재 vi 에디터의 상태를 전혀 나타내지 않는다.

:set ai

자동 들여쓰기를 한다(Auto Indent).

:set ts=n

탭의 크기를 n으로 정한다(Tab Stop).


[출처] vi 명령어|작성자 고굉