<개인공부>/[Linux\Unix]

[vi 명령어] vi 명령어 정리

BlockDMask 2017. 7. 7. 00:32
반응형

[리눅스나 유닉스에서 사용하는 vi 편집기 명령어 총 정리 입니다.]

<목차>
1. vi 편집기 명령어 전체 구조 살펴보기
2. vi 명령어 총정리 (자주 사용하는 것은 색으로 표시)

3. 제가 진짜로 사용하는 vi 알짜 명령어 정리
4. vi 편집기 예시 (vi 명령 사용해서 편집 저장까지 흐름)


1. vi 편집기 명령어로 들어가기 전에 전체적인 구조 살펴보기


: linux, unix 에서 사용하는 vi 편집기는 명령모드, 입력모드, 마지막 행 모드로 총 3가지 모드로 구성되어있습니다.

: 흔히 사람들이 말하는 vi 명령어는 이 세가지 모드를 자유자재로 왔다갔다 하면서 코드나 글을 작성하는 것을 말합니다.


i) 명령 모드(command mode) - 처음 vi 명령어로 vi를 시작하게 되면 들어가게 됩니다. 여기서는 방향키를 이용하여 커서를 이동할 수 있으며,  "dd" 나 "yy" 로 한 줄 삭제 및 한 줄 붙여넣기, 또는 "x" 명령어로 글자 하나를 삭제할 수 있습니다. (더 많은 명령어는 아래에)


ii) 입력 모드(insert mode) - 명령모드에서 "i" 나 "a" 명령을 통해서 입력 모드로 넘어 갈 수있습니다. 입력모드로 가게되면, 자유롭게 코드나 글을 작성을 하시면 됩니다. 명령 모드로 다시 돌아오려면 "ESC"를 누르면 됩니다.  
("i" 명령은 커서가 현재 위치한 부분에서 부터, "a"는 커서 바로 다음 부분부터)


iii) 마지막 행 모드(Last line mode) - 마지막행 모드는 명령모드에서 ":" (콜론) 을 입력하면 화면 맨 밑단에 :______ 하며 입력을 할수 있는 공간이 나옵니다. 여기서 현재까지 내가 작성한 이 내용을 저장하고 vi를 종료(wq)할지, 그냥 종료(q, q!)할지 등을 입력할 수 있습니다.


  • 제가 손으로 직접 그려본 vi 구성입니다. (제 손가락이 참 이쁘군요.)



2. vi 명령어 정리

**색감이 있는 것들이 자주 사용하게될 명령어들 입니다.


i) 명령 모드(command mode)에서의 명령어들

- esc 눌렀을때 또는 vi 바로 들어가자마자 상태 입니다! (아시쥬?)

- 엔터를 치지 않아도 명령이 들어갑니다.

vi 명령어

동작 

i

- 현재 커서 위치삽입 (입력모드로 넘어감) 

a

- 현재 커서 바로 다음위치삽입 (입력모드로 넘어감) 

o

- 현재 줄 다음 위치에 삽입 (입력모드로 넘어감)
- 영문 오(o) 입니다.

x

- 커서가 위치한 곳의 글자 1개 삭제. (5x : 문자 5개 삭제) 

 dw

- 커서가 위치한 곳에서 부터 단어 삭제 (커서가 위치한 곳 부터 띄어쓰기 까지)

 dd

- 커서가 위치한 곳의 한 줄 삭제 (삭제이지만, p로 복구가능)

 u

- 방금 한 명령 취소 (ctrl + z 라고 생각하면 됩니다)

 yy

- 현재 줄을 버퍼로 복사 (한 줄을 ctrl + c 한다고 생각하면 됩니다.)

- 5줄 복사 : 5yy 

 p

- 현재 커서가 있는 줄 바로 아래에 버퍼 내용 붙여넣기 (이전에 복사한 줄을 현재 커서 아래부터 ctrl + v 한다고 생각하면 됩니다.)

- 5dd를 이용해서 다섯줄을 지운 것도 p 한번으로 붙여넣기 가능합니다.

- 그렇다면 : 잘라내기 dd -> 붙여넣기 p

 (N)dd

- N 행 삭제 (삭제가 되는 것 처럼 보이지만 실제로는 버퍼에 들어가 있습니다. 버퍼에 들어가 있기 때문에 p를 이용해서 붙여넣기 가능)

- 잘라내기 라고 생각하면 됩니다. (ctrl + x)

- vi에서 여러줄을 삭제하고 싶다면 (N)dd 를 사용하면 됩니다. (N에는 숫자가 들어갑니다)

k

- 위로! (커서가 한 줄 위로 올라감.)

j

- 아래로! (커서가 한 줄 아래로 내려감)

l

- 오른쪽으로! (커서가 한칸 우측으로감)

- 엘 입니다

h

- 왼쪽으로! (커서가 한칸 좌측으로감)

0

- 커서가 있는 줄의 맨 앞으로 감 (home 키라고 생각하면 됩니다)
- 숫자 0(영) 입니다.

$

- 커서가 있는 줄의 맨 뒤로 감 (end 키라고 생각하면 됩니다)

(

- 현재 문장의 처음

)

- 현재 문장의 끝

{

- 현재 문단의 처음

}

- 현재 문단의 끝

숫자-

- 숫자 만큼 윗 줄로 이동

숫자+

- 숫자 만큼 아래 줄로 이동

G

- 파일의 끝으로 이동.

- 대문자로 사용해야합니다. (Shift + g)

r

- 한 문자 변경 

cc

- 커서가 있는 그 줄의 내용 변경



ii) 마지막 행 모드(last line mode)에서의 명령어들

- esc 누르고, 콜론( : )을 누르면 나오는 상태입니다. 이것도 아시쥬? 1번에서 보고 오셨쥬?

- 아래 명령어 하고 엔터를 쳐야지 명령이 들어갑니다.

 vi 명령어

동작 

w

- 현재 파일명으로 파일 저장. (저장만 함 꺼지지는 않음) 

w [파일명]

- 입력한 파일명으로 파일 저장. (저장만 함 꺼지지는 않음)

q

- vi 종료 (저장되지 않음)

q! 

- vi 강제 종료 ( ! 가 붙으면 강제로 수행)

wq

- 저장 후 종료 

wq!

- 강제 저장 후 종료 ( ! 가 붙으면 강제로 수행) 

f [파일명]

- 파일이름을 [파일명]으로 변경

- 예시 : f abc.txt

숫자 

- 해당 라인으로 커서 이동

$

- 파일의 맨 끝 줄로 이동 

e!

- 마지막 저장 이후 모든 편집 취소 

/문자열

- 현재 커서 위치에서 부터파일 앞쪽으로 문자열 탐색

?문자열

- 현재 커서 위치에서 부터 파일 뒤쪽으로 문자열 탐색 

set nu

- vi 라인 번호 출력

set nonu

- vi 라인 번호 출력 취소 



3. 제가 진짜 사용하는 vi 명령어들 알짜 모음


> 명령모드 (esc 눌렀을때, vi 처음 들어갔을때)

1. 파일의 끝으로 이동할때는 - G

2. 한줄 잘라내기 - dd

3. 세줄 잘라내기 - 3dd

4. 붙여넣기 - p

5. 한글자 삭제 - x

6. 단어 삭제 - dw

7. 실행취소! - u

8. 줄의 맨 앞 - o

9. 줄의 맨 뒤 - $

(G, $ 이거 개꿀)


> 마지막행 모드 (esc -> : 눌렀을때)

(명령어 뒤에 !를 붙이면 강제로 수행하니까, vi가 궁시렁 궁시렁 거리면 " ! "붙여서 실행 하면 됩니다.)

1. 저장만 : w

2. 종료만 : q

3. 저장 후 종료 : wq

4. 라인 번호좀 보자 : set nu

5. 커서 위치 뒤로 문자열좀 찾자 : ?문자열

6. 커서 위치 앞으로 문자열좀 찾자 : /문자열

(set nu, wq! 개꿀)


> 그럼 진짜 흐름이 어떤식인가요?

- vi abc.txt 명령으로 창열고.

- 방향키랑 i , a , 이용해서 편집모드로 들어가서 편집 마구마구 하고.

- 이러다가 잘라낼때는 그 위치에서 esc -> dd 눌러서 한줄 잘라내고.

- 붙여 넣을 위치의 윗줄에서 p 눌러서 붙여 넣고

- 또다시 i, a 이용해서 편집모드 들어갔다가 오타가 나오거나 하면 esc -> x 눌러서 글자 없애고 다시 i, a 이용해서 편집모드로 편집

- 이러다가 다 작성하면 esc -> 콜론 (:) 누르고 -> wq 입력후 엔터 치면 저장후 종료까지 깔-끔.



4. vi 명령어를 통해 파일을 만들고 저장하기 까지의 과정

(실제로 저는 이렇게 사용합니다.)

: unix, linux 를 보통 GUI가 아닌 CLI 로 사용할때, putty 나 telnet를 통해서 접속해서 사용하는데, 저는 맥 사용자이므로 terminal 기준으로 설명 하겠습니다.

: 터미널을 키면 쉘 창이 나옵니다. ($_____)

: $            <-- 우리는 여기에 입력을 합니다. 이 곳을 **쉘 이라고 합니다


**쉘 : 사용자의 명령을 입력 받아서 처리하고 결과를 출력해준다. 즉, 커널과 사용자 사이의 인터페이스.


1. "dmask.txt" 라는 이름으로 vi 편집기를 엽니다.
$vi dmask.txt


2. $vi dmask.txt에서 엔터를 치면 vi 편집기 내부로 들어옵니다. 이때는 명령모드 상태 입니다.


3. 여기서 "i", "a" 등의 명령어를 입력하여 입력모드로 갑니다. 아래의 INSERT 가 보이시나요?


4. 자유롭게 작성을 합니다. 

예시) "BlockDMask 블로그 짱짱"


5. 편집이 끝난 뒤 "ESC"를 입력하여 다시 명령모드로 되돌아옵니다. 아래 INSERT 문이 사라졌습니다.


6. " : " 을 입력했을 때 마지막 행 모드로 들어간 모습입니다. (아래에 " :___" 이 보이시나요?)


7. " :_____ " 부분에 "wq" 를 입력하여 저장 후 종료를 합니다.


8. 쉘에서 "ls" 명령을 통해 파일이 생성된것을 확인할 수 있습니다.


도움이 되었다면 추천 꾹! 부탁드려요!

반응형