
터미널 명령어를 정리하고 나니 자연스럽게 vim 얘기로 넘어가게 됩니다. 서버에 붙어서 파일 하나 수정해야 할 때 vim 말고 다른 선택지가 없는 경우가 꽤 있거든요. 근데 처음에 열었다가 나가지도 못해서 터미널 창을 그냥 닫았다는 얘기는 vim 입문 경험담에 단골로 등장하는 이야기이기도 합니다.
사실 vim이 어렵다기보다는, 기존 에디터와 작동 방식 자체가 다른 게 문제입니다. 그 핵심이 "모드"인데, 이걸 이해하고 나면 나머지는 생각보다 빠르게 익혀집니다.
1편에서는 모드 개념, 이동, 기본 편집(삽입/삭제/복사), 저장과 종료를 다룹니다.
모드(Mode) 개념부터
vim이 처음에 낯선 가장 큰 이유는 "모드"가 있기 때문입니다. 일반 에디터는 파일을 열면 바로 타이핑하면 되는데, vim은 그렇지 않습니다.
vim에는 크게 네 가지 모드가 있습니다.
| 모드 | 진입 방법 | 하는 일 |
|---|---|---|
| Normal | Esc (기본 시작 모드) |
이동, 삭제, 복사 등 명령 입력 |
| Insert | i, a, o 등 |
텍스트 직접 입력 |
| Visual | v, V, Ctrl+v |
텍스트 범위 선택 |
| Command | : |
저장, 종료, 치환 등 |
vim을 처음 열면 Normal 모드입니다. 여기서는 키보드 입력이 명령어로 해석됩니다. j를 누르면 j가 타이핑되는 게 아니라 커서가 아래로 이동하는 식입니다.
텍스트를 입력하려면 Insert 모드로 전환해야 하고, 입력을 마치면 Esc로 Normal 모드로 돌아옵니다. 이 흐름이 vim의 기본 리듬입니다.
Normal → Insert: i, a, o 등으로 진입
Insert → Normal: Esc
Normal → Command: :
Normal → Visual: v
기본 이동
Normal 모드에서 방향키 대신 h, j, k, l을 씁니다.
h ← 왼쪽
j ↓ 아래
k ↑ 위
l → 오른쪽
방향키로도 이동되긴 하는데, 홈포지션에서 손을 안 떼고 쓸 수 있어서 익숙해지면 h/j/k/l이 훨씬 편합니다. 처음엔 어색하지만 의도적으로 써보면 생각보다 빨리 손에 붙습니다.
단어 단위 이동
w 다음 단어의 시작으로
b 이전 단어의 시작으로
e 현재(또는 다음) 단어의 끝으로
W 공백 기준 다음 단어 (구두점 무시)
B 공백 기준 이전 단어
w와 W의 차이는 hello-world에서 드러납니다. w는 hello, -, world를 각각 단어로 보고, W는 hello-world 전체를 하나로 봅니다.
줄 내 이동
0 줄의 맨 처음 (공백 포함)
^ 줄의 첫 번째 비공백 문자
$ 줄의 맨 끝
파일 전체 이동
gg 파일 맨 처음으로
G 파일 맨 끝으로
:n n번째 줄로 이동 (예: :30)
Ctrl+d 반 페이지 아래로
Ctrl+u 반 페이지 위로
Ctrl+f 한 페이지 아래로
Ctrl+b 한 페이지 위로
숫자 조합
이동 명령어 앞에 숫자를 붙이면 그 횟수만큼 반복합니다. vim에서 가장 강력한 패턴 중 하나입니다.
5j 아래로 5줄 이동
3w 세 단어 앞으로
10k 위로 10줄
Insert 모드 진입
Normal 모드에서 Insert로 들어가는 방법이 여러 가지 있는데, 어디서 커서가 위치하냐에 따라 다르게 씁니다.
i 현재 커서 앞에서 삽입
a 현재 커서 뒤에서 삽입
o 현재 줄 아래에 새 줄 만들고 삽입
I 현재 줄 맨 앞에서 삽입
A 현재 줄 맨 끝에서 삽입
O 현재 줄 위에 새 줄 만들고 삽입
가장 자주 쓰는 건 i, a, o 세 가지입니다. 줄 끝에 뭔가 추가할 때는 A, 새 줄을 아래에 만들 때는 o가 편합니다.
삭제
삭제 명령어는 Normal 모드에서 씁니다. 삭제된 내용은 클립보드(레지스터)에 저장되기 때문에 p로 붙여넣기도 됩니다. 즉 삭제와 잘라내기가 같습니다.
x 커서 위치 문자 하나 삭제
X 커서 앞 문자 하나 삭제
dd 현재 줄 전체 삭제
D 커서부터 줄 끝까지 삭제
dw 커서부터 다음 단어 시작까지 삭제
de 커서부터 단어 끝까지 삭제
d$ 커서부터 줄 끝까지 삭제 (D와 같음)
d0 커서부터 줄 처음까지 삭제
dgg 현재 줄부터 파일 처음까지 삭제
dG 현재 줄부터 파일 끝까지 삭제
여기서도 숫자 조합이 됩니다.
3dd 세 줄 삭제
5x 다섯 글자 삭제
2dw 두 단어 삭제
c (change)
c는 삭제 후 바로 Insert 모드로 전환합니다. 지우고 다시 입력하려는 경우에 쓰면 편합니다.
cw 단어 삭제 후 Insert
cc 줄 전체 삭제 후 Insert
C 커서부터 줄 끝까지 삭제 후 Insert
복사 & 붙여넣기
vim에서 복사는 "yank"라고 부릅니다. y가 복사 키입니다.
yy 현재 줄 복사
yw 현재 단어 복사
y$ 커서부터 줄 끝까지 복사
ygg 현재 줄부터 파일 처음까지 복사
yG 현재 줄부터 파일 끝까지 복사
붙여넣기는 p와 P입니다.
p 커서 뒤(또는 아래 줄)에 붙여넣기
P 커서 앞(또는 위 줄)에 붙여넣기
dd로 줄을 잘라내고 다른 위치에서 p를 누르면 잘라낸 줄이 붙여넣어집니다. 줄 이동할 때 유용합니다.
숫자 조합도 됩니다.
3yy 세 줄 복사
되돌리기 & 다시 실행
u 되돌리기 (undo)
Ctrl+r 다시 실행 (redo)
U 현재 줄 변경 전체 되돌리기
. 직전 명령 반복 (매우 유용)
.은 특히 자주 씁니다. 같은 작업을 여러 줄에 반복할 때 강력합니다. 예를 들어 dd로 줄을 지우고 나서 .을 누르면 또 지워집니다.
저장 & 종료
Command 모드(:)에서 씁니다.
:w 저장 (write)
:q 종료 (quit) — 변경사항 없을 때만
:wq 저장 후 종료
:q! 저장 없이 강제 종료
:wq! 강제 저장 후 종료 (읽기 전용 파일 등)
ZZ 저장 후 종료 (:wq와 같음, Normal 모드에서)
ZQ 저장 없이 종료 (:q!와 같음, Normal 모드에서)
:w filename처럼 파일명을 지정하면 다른 이름으로 저장합니다.
처음에 vim에서 못 나오는 이유가 여기 있습니다. :q!를 모르면 나갈 방법이 없어 보이거든요. 일단 Esc를 눌러서 Normal 모드로 돌아온 뒤 :q!를 치면 무조건 나올 수 있습니다.
정리 표
| 분류 | 명령어 | 동작 |
|---|---|---|
| 모드 | i a o |
Insert 진입 (앞 / 뒤 / 새 줄 아래) |
| 모드 | I A O |
Insert 진입 (줄 앞 / 줄 끝 / 새 줄 위) |
| 모드 | Esc |
Normal로 복귀 |
| 이동 | h j k l |
← ↓ ↑ → |
| 이동 | w b e |
단어 앞 / 뒤 / 끝 |
| 이동 | 0 ^ $ |
줄 처음 / 첫 비공백 / 줄 끝 |
| 이동 | gg G |
파일 처음 / 끝 |
| 이동 | Ctrl+d Ctrl+u |
반 페이지 아래 / 위 |
| 삭제 | x dd dw |
문자 / 줄 / 단어 삭제 |
| 삭제 | D d$ |
커서~줄 끝 삭제 |
| 변경 | cw cc C |
삭제 + Insert 진입 |
| 복사 | yy yw |
줄 / 단어 복사 |
| 붙여넣기 | p P |
뒤 / 앞에 붙여넣기 |
| 되돌리기 | u Ctrl+r |
undo / redo |
| 반복 | . |
직전 명령 반복 |
| 저장/종료 | :w :q :wq :q! |
저장 / 종료 / 저장+종료 / 강제종료 |
2편에서는 검색과 치환, Visual 모드, 분할 화면, 그리고 알아두면 편한 설정들을 정리합니다.
'블로그, 컴퓨터 > Cheatsheets' 카테고리의 다른 글
| Neovim 설정 정리 (2편) — lazy.nvim, LSP, 주요 플러그인 (0) | 2026.05.25 |
|---|---|
| Neovim 설정 정리 (1편) — init.lua 구조와 Lua 기초 (0) | 2026.05.25 |
| Vim 명령어 정리 (2편) — 검색/치환, Visual 모드, 분할 화면, 설정 (0) | 2026.05.24 |
| 리눅스 터미널 명령어 정리 (2편) — 권한, 프로세스, 네트워크, 검색 & 파이프 (0) | 2026.05.23 |
| 리눅스 터미널 명령어 정리 (1편) — 파일 탐색, 관리, 내용 확인 (0) | 2026.05.23 |