Vim이란?
Vim은 terminal에서 사용하는 text editor이다.
처음에는 조작 방식이 낯설지만, mode와 기본 명령어를 익히면 서버에서 파일을 빠르게 수정할 수 있다.
Vim의 핵심은 mode이다. 일반 editor처럼 항상 입력하는 방식이 아니라, 상황에 따라 mode를 바꿔가며 사용한다.
기본 mode
Vim에서 가장 중요한 mode는 다음 네 가지이다.
| Mode | 용도 | 진입 |
|---|---|---|
| Normal mode | 이동, 삭제, 복사, 명령 실행 | Esc |
| Insert mode | 텍스트 입력 | i, a, o |
| Visual mode | 영역 선택 | v, V, Ctrl-v |
| Command-line mode | 저장, 종료, 검색 치환 | : |
Vim을 처음 열면 보통 Normal mode이다. 글자를 입력하려면 Insert mode로 들어가야 한다.
Normal mode -> i -> Insert mode
Insert mode -> Esc -> Normal mode
막혔을 때는 일단 Esc를 눌러 Normal mode로 돌아오면 된다.
파일 열기
파일을 열 때는 terminal에서 다음처럼 입력한다.
vim main.py
파일이 없으면 새 파일이 열린다.
vim new_file.txt
읽기 전용으로 열고 싶다면 -R option을 사용할 수 있다.
vim -R config.txt
저장과 종료
Vim에서 저장과 종료는 Command-line mode에서 한다.
Normal mode에서 :를 입력한 뒤 명령어를 입력한다.
| 명령어 | 의미 |
|---|---|
:w | 저장 |
:q | 종료 |
:wq | 저장 후 종료 |
:x | 저장 후 종료 |
:q! | 저장하지 않고 강제 종료 |
:w filename | 다른 이름으로 저장 |
가장 자주 쓰는 명령은 다음 두 개이다.
:wq
:q!
수정한 내용을 버리고 나가려면 :q!를 사용한다.
Insert mode 진입
텍스트를 입력하려면 Insert mode로 들어가야 한다.
| 명령어 | 의미 |
|---|---|
i | cursor 앞에서 입력 |
a | cursor 뒤에서 입력 |
I | 현재 줄 맨 앞에서 입력 |
A | 현재 줄 맨 뒤에서 입력 |
o | 아래에 새 줄 만들고 입력 |
O | 위에 새 줄 만들고 입력 |
예를 들어 현재 줄 끝에 내용을 추가하려면 A를 누른다.
Normal mode에서 A 입력
줄 끝으로 이동하면서 Insert mode 진입
입력이 끝나면 Esc로 Normal mode로 돌아온다.
기본 이동
Normal mode에서는 다음 키로 이동할 수 있다.
| 명령어 | 의미 |
|---|---|
h | 왼쪽 |
j | 아래 |
k | 위 |
l | 오른쪽 |
방향키도 동작하지만 Vim에서는 h, j, k, l을 많이 사용한다.
단어 단위 이동은 다음과 같다.
| 명령어 | 의미 |
|---|---|
w | 다음 단어 시작으로 이동 |
b | 이전 단어 시작으로 이동 |
e | 현재 또는 다음 단어 끝으로 이동 |
줄 안에서 이동할 때는 다음 명령어가 유용하다.
| 명령어 | 의미 |
|---|---|
0 | 줄 맨 앞으로 이동 |
^ | 줄의 첫 non-blank 문자로 이동 |
$ | 줄 맨 끝으로 이동 |
파일 전체 이동
파일 안에서 크게 이동할 때는 다음 명령어를 사용한다.
| 명령어 | 의미 |
|---|---|
gg | 파일 맨 위로 이동 |
G | 파일 맨 아래로 이동 |
10G | 10번째 줄로 이동 |
Ctrl-d | 반 화면 아래로 이동 |
Ctrl-u | 반 화면 위로 이동 |
Ctrl-f | 한 화면 아래로 이동 |
Ctrl-b | 한 화면 위로 이동 |
특정 줄 번호로 이동하려면 숫자G를 사용한다.
42G
또는 command mode에서 다음처럼 입력할 수도 있다.
:42
삭제
Normal mode에서 삭제 명령어는 d를 중심으로 구성된다.
| 명령어 | 의미 |
|---|---|
x | cursor 위치의 문자 삭제 |
dd | 현재 줄 삭제 |
dw | 단어 삭제 |
d$ | cursor부터 줄 끝까지 삭제 |
d0 | cursor부터 줄 앞까지 삭제 |
D | cursor부터 줄 끝까지 삭제 |
여러 줄을 삭제하려면 숫자를 붙인다.
3dd
현재 줄부터 3줄을 삭제한다.
삭제한 내용은 register에 들어가므로 붙여넣을 수 있다.
복사와 붙여넣기
Vim에서는 복사를 yank라고 부른다.
| 명령어 | 의미 |
|---|---|
yy | 현재 줄 복사 |
yw | 단어 복사 |
y$ | cursor부터 줄 끝까지 복사 |
p | cursor 뒤 또는 아래에 붙여넣기 |
P | cursor 앞 또는 위에 붙여넣기 |
여러 줄 복사는 숫자를 붙인다.
5yy
현재 줄부터 5줄을 복사한다.
붙여넣기는 p를 가장 많이 사용한다.
p
변경
c 명령어는 삭제 후 Insert mode로 들어간다.
| 명령어 | 의미 |
|---|---|
cw | 단어를 지우고 입력 |
cc | 현재 줄을 지우고 입력 |
c$ | cursor부터 줄 끝까지 지우고 입력 |
r | 문자 하나 교체 |
R | replace mode 진입 |
예를 들어 단어 하나를 바꾸려면 cursor를 단어 위에 두고 다음을 입력한다.
cw
새 단어를 입력한 뒤 Esc를 누르면 된다.
Undo와 Redo
수정 취소와 다시 실행은 다음과 같다.
| 명령어 | 의미 |
|---|---|
u | undo |
Ctrl-r | redo |
방금 한 수정을 취소하려면 u를 누른다.
u
취소한 작업을 다시 적용하려면 Ctrl-r을 누른다.
검색
파일 안에서 문자열을 찾으려면 /를 사용한다.
/keyword
다음 검색 결과로 이동하려면 n을 누른다.
이전 검색 결과로 이동하려면 N을 누른다.
| 명령어 | 의미 |
|---|---|
/text | 아래 방향 검색 |
?text | 위 방향 검색 |
n | 다음 결과 |
N | 이전 결과 |
검색 highlight를 끄려면 다음 명령어를 사용한다.
:noh
치환
문자열을 바꾸려면 substitute 명령어를 사용한다.
현재 줄에서 첫 번째 항목만 바꾸기:
:s/old/new/
현재 줄의 모든 항목 바꾸기:
:s/old/new/g
파일 전체에서 바꾸기:
:%s/old/new/g
바꾸기 전에 하나씩 확인하려면 c option을 붙인다.
:%s/old/new/gc
Visual mode
Visual mode는 영역을 선택할 때 사용한다.
| 명령어 | 의미 |
|---|---|
v | 문자 단위 선택 |
V | 줄 단위 선택 |
Ctrl-v | block 단위 선택 |
선택한 뒤 다음 명령어를 사용할 수 있다.
| 명령어 | 의미 |
|---|---|
y | 선택 영역 복사 |
d | 선택 영역 삭제 |
> | 선택 영역 indent 증가 |
< | 선택 영역 indent 감소 |
여러 줄을 한 번에 들여쓰기할 때 V로 줄을 선택한 뒤 >를 누르면 된다.
여러 파일 다루기
Vim 안에서 다른 파일을 열 수 있다.
| 명령어 | 의미 |
|---|---|
:e file.txt | 파일 열기 |
:bn | 다음 buffer |
:bp | 이전 buffer |
:bd | 현재 buffer 닫기 |
:ls | buffer 목록 |
예를 들어 main.py를 열어둔 상태에서 config.py를 열려면 다음처럼 입력한다.
:e config.py
buffer 목록을 보려면 다음 명령어를 사용한다.
:ls
창 분할
Vim은 화면을 나눠서 여러 파일을 볼 수 있다.
| 명령어 | 의미 |
|---|---|
:split | 수평 분할 |
:vsplit | 수직 분할 |
Ctrl-w h | 왼쪽 창으로 이동 |
Ctrl-w j | 아래 창으로 이동 |
Ctrl-w k | 위 창으로 이동 |
Ctrl-w l | 오른쪽 창으로 이동 |
Ctrl-w q | 현재 창 닫기 |
파일을 열면서 수직 분할하려면 다음처럼 쓴다.
:vsplit config.py
분할 창 사이를 이동할 때는 Ctrl-w를 누른 뒤 방향키 역할의 h, j, k, l을 누른다.
Tab
Vim의 tab은 여러 화면 layout을 관리할 때 사용한다.
| 명령어 | 의미 |
|---|---|
:tabnew | 새 tab 열기 |
:tabnew file.txt | 파일을 새 tab으로 열기 |
gt | 다음 tab |
gT | 이전 tab |
:tabclose | 현재 tab 닫기 |
예를 들어 파일을 새 tab으로 열려면 다음처럼 입력한다.
:tabnew main.py
Indent
코드 들여쓰기는 다음 명령어를 자주 쓴다.
| 명령어 | 의미 |
|---|---|
>> | 현재 줄 indent 증가 |
<< | 현재 줄 indent 감소 |
= | 선택 영역 자동 정렬 |
gg=G | 파일 전체 자동 정렬 |
파일 전체 indent를 정리하려면 Normal mode에서 다음을 입력한다.
gg=G
다만 language 설정이나 filetype 설정에 따라 결과가 달라질 수 있다.
자주 쓰는 조합
실제로 자주 쓰는 조합은 다음과 같다.
| 명령어 | 의미 |
|---|---|
i | 입력 시작 |
Esc | Normal mode 복귀 |
:w | 저장 |
:wq | 저장 후 종료 |
:q! | 버리고 종료 |
dd | 줄 삭제 |
yy | 줄 복사 |
p | 붙여넣기 |
/keyword | 검색 |
n | 다음 검색 결과 |
u | undo |
Ctrl-r | redo |
gg | 파일 맨 위 |
G | 파일 맨 아래 |
처음에는 이 정도만 익혀도 서버에서 파일을 수정하는 데 큰 문제는 없다.
최소 workflow
처음 Vim을 쓴다면 다음 흐름만 먼저 익히면 된다.
- 파일 열기
vim config.txt
- 입력하기
i
- 입력 종료
Esc
- 저장 후 종료
:wq
- 실수했으면 저장하지 않고 종료
:q!
정리
Vim 명령어는 mode를 기준으로 이해하면 쉽다.
- 입력은 Insert mode에서 한다.
- 이동, 삭제, 복사, 붙여넣기는 Normal mode에서 한다.
- 저장과 종료는
:명령어로 한다. - 검색은
/keyword, 다음 결과는n을 사용한다. - 여러 파일은 buffer, split, tab으로 관리할 수 있다.
Vim을 처음 배울 때 모든 명령어를 외울 필요는 없다.
i, Esc, :wq, :q!, dd, yy, p, /, n, u 정도만 익힌 뒤 필요한 명령어를 하나씩 추가하면 된다.