---
title: "Vim 단축키 정리"
date: "2019-05-29"
tags: ["TIL","Vim"]
status: archived
verified: false
---

---

## vimtutor를 이용한 Vim 단축키 학습

![00](/md/legacy-assets/til/Vim/00.webp)

* **git bash에서 `vimtutor`를 실행하여 연습한 내용 정리**

```
vimtutor <ENTER>

vim tutor.ko <ENTER>
```


* **vim으로 파일 열기**

```
vim FILENAME <ENTER>
```

* **ESC - 명령모드/ 편집모드 변경**

### 1.1 커서 움직이기
	
* **h,k,j,l**을 이용해서 커서 이동

![01](/md/legacy-assets/til/Vim/01.webp)


### 1.2 빔을 시작하고 끝내기

* **바뀐 내용을 저장하지 않고 종료**

```
:q! <ENTER> 
```

* **바뀐 내용을 저장하고 종료**

```
:wq <ENTER>
```

### 1.3 텍스트 편집 - 지우기

* 명령 모드에서 **'x'**를 누르면 커서가 위치한 곳의 글자를 지울 수 있음

### 1.4 텍스트 편집 - 삽입(INSSERTION)

* 명령 모드에서 **'i'**를 누르면 텍스트를 입력할 수 있음
  * ESC는 명령 모드로 돌아가는데 쓰이며 원치 않는 명령이나 완전히 입력되지 않은 명령을 취소하는 데에도 쓰임

![02](/md/legacy-assets/til/Vim/02.webp)

### 2.1 삭제(DELETION) 명령

* **한 단어를 끝까지 지우기**

```
dw
```

### 2.2 다른 삭제 명령

* **커서 뒤 끝까지 지우기**

```
d$
```

### 2.3 명령과 적응 대상에 대해

* 삭제명령 d의 형식
  * **횟수 - 명령을 몇 번 수행할 지(옵션, 기본값 = 1)**
  * **d - 지우는 명령**
  * **대상 - 아래에 제시된 대상에 대해 명령을 수행**
        * **w** - 커서에서 그 단어의 끝까지(공백 포함)
        * **e** - 커서에서 그 단어의 끝까지(공백 포함X)
        * **$** - 커서에서 그 줄의 끝까지
        * 명령모드에서 명령 없이 대상 입력으로 이동 가능

```
[횟수] d 대상

d [횟수] 대상
```

### 2.4 '명령 -대상' 에 대한 

* **전체 줄 삭제**
  * 줄 전체를 지우는 일이 찾아 vi를 디자인한 사람들은 간단히 d를 두번 연달아 치면 한 줄을 지울 수 있도록 함

```
dd
```

* **여러줄을 삭제도 횟수를 통해 가능**
  * 2줄 삭제

```
2dd
```

### 2.5 취소(UNDO) 명령

* **'u'**를 누르면 마지막 명령이 취소됨, **'U'**는 줄 전체를 **UNDO**
* **Ctrl+'r'** 로 **REDO**

![03](/md/legacy-assets/til/Vim/03.webp)


### 3.1 붙이기(PUT) 명령

* **'p'**를 입력하여 **마지막으로 지운 내용을 붙일 수 있음**

### 3.2 치환(REPLACE) 명령

* **'r'**을 누른 후 바꿀 글자를 입력해서 **한 글자를 변경**

### 3.3 변환(CHANGE) 명령

* **한 단어의 일부나 전체를 바꾸기(커서 뒤부터 단어 잘라내기)**

```
cw
```

### 3.4 c를 이용한 다른 변환 명령

* **변환 명령은 삭제와 동일한 방식으로 동작**
    * 적용 가능한 대상 또한 같음(w, $, e, .. )

```
[횟수] c 대상
c [횟수] 대상
```

![04](/md/legacy-assets/til/Vim/04.webp)

### 4.1 위치와 파일의 상태

* **CTRL + g**를 누르면 파일 내에서의 **현재 위치와 파일의 상태**를 볼 수 있음
* **SHIFT + g**를 누르면 파일 **마지막 줄로 이동**

![05](/md/legacy-assets/til/Vim/05.webp)

* **특정 줄을 입력하고 SHIFT+g로 이동가능**

```
[특정줄]<SHIFT+g>
```

### 4.2 찾기 명령

* **순서대로 찾기**
  * 다음에 찾을 단어는 **'n'**을 눌러서 찾을 수 있다

```
/[찾을단어]
?[역순으로 찾을 단어]
```

### 4.3 괄호의 짝 찾기

* (,[,&#123;에 커서를 올리고 **'%'**를 누르면 닫히는 ),],&#125; 짝을 찾을 수 있음
  * 짝이 맞지 않을 때 디버깅에 유용

### 4.4 에러를 수정하는 방법

* **'old'를 'new'로 치환(SUBSTITUTE)**
  * g가 없으면 커서 뒤에 처음 발견한 한 단어만 치환됨
  * g가 있으면 그줄 전체(globally)를 치환

```
:s/old/new/g
```

* **두 줄 사이의 모든 문자열에 대해 치환**
  * 여기서 #,#은 두 줄의 줄번호

```
:#, #s/old/new/g
```

* **파일 전체에서 발견된 모든 것을 치환**

```
:%s/old/new/g
```

![06](/md/legacy-assets/til/Vim/06.webp)

### 5.1 외부 명령 실행하는 방법

* **':!'**을 입력한 후 실행하려는 명령을 입력
  * 어떤 외부명령도 이 방법으로 실행가능

```
:![외부 쉘 명령]

:!ls
```

### 5.2 보다 자세한 파일 저장

* **수정된 내용을 파일로 저장**

```
:w FILENAME
```

* **만든 파일 지우기**

```
(MS-DOS) !del FILENAME
(Unix)   !rm FILENAME
```

### 5.3 선택적으로 저장하는 명령

* **파일의 일부를 저장**

```
:#,# w FILENAME
```

### 5.4 파일 읽어들이기, 합치기

* 위에 일부 저장한 파일을 현재 파일 커서 위치에 합치고 싶을 때 사용

```
:r FILENAME
```

![07](/md/legacy-assets/til/Vim/07.webp)

### 6.1 새 줄 열기(OPEN)

* **'O'**를 누르면 커서 **위에 줄을 만들고 편집모드**가 됨
* **'o'**를 누르면 커서 **아래에 줄을 만들고 편집모드**가 됨

### 6.2 추가(APPEND)

* **'a'**를 누르면 커서 다음에 글을 입력할 수 있음
* **SHIFT+a**를 사용하면 줄 맨뒤에 커서가 놓이고 편집모드가 됨

### 6.3 치환(REPLACE)의 다른 버전

* 대문자 **'R'**을 입력하면 하나 이상의 글자를 바꿀 수 있음
  * R을 누른 부분부터 ESC를 누르기 전까지 입력하는 값으로 값들이 치환됨

### 6.4 옵션 설정(SET)

* 찾기나 바꾸기에서 대소문자 구분을 없애기 위해 옵션을 설정
  * 아래와 같이 찾기를 수행하면 대소문자를 구분

```
/ignore
```

* **'ic'(대소문자 구별 안함, ignore case)** 옵션 설정
  * Ignore 단어도 검색됨

```
:set ic
```

* **hlsearch, incsearch 옵션** 설정

```
:set hls is
```

![08](/md/legacy-assets/til/Vim/08.webp)

* 찾은 내용이 강조(Highlight)되는 것을 없애기

```
:nohlsearch
```

![09](/md/legacy-assets/til/Vim/09.webp)

### 7. 온라인 도움말 명령

* 온라인 도움말 시스템 사용

```
:help

# help 종료시
:q <ENTER>

# 어떤 주제에 관한 도움말 찾기
:help [단어]

:help w
:help c_<T
:help insert-index
:help user-manual
```

### 8. 시작 스크립트 만들기

* 빔의 기능 켜기
* 빔은 vi보다 많은 기능을 가짐, 대부분 기본적으로 동작하지 않음
* 더 많은 기능을 써보기 위해선 "vimrc"라는 파일을 만들어야 함
* "vimrc"파일을 수정

```
#Unix의 경우
:edit ~/.vimrc

#MS-Windows의 경우
:edit $VIM/_vimrc
```

* "vimrc"의 예제를 읽어들임

```
:read $VIMRUNTIME/vimrc_example.vim
```

* 다음과 같이하여 파일을 저장

```
:write
```

* 원하는 설정을 이 "vimrc"파일에 넣어둘 수 있음
