전체 치트시트

Vim 명령어 치트시트

Vim / Neovim 빠른 참조: 모드, 커서 이동, 편집, 검색 & 치환, 다중 파일 탐색, 레지스터 / 매크로, 비주얼 블록 편집 — 가장 흔한 동작의 짧은 예시까지 정리했습니다.

명령어 37개

모드 & 저장

:w / :q / :wq / :q!

저장, 종료, 저장 후 종료, 저장하지 않고 강제 종료.

:w file (다른 이름으로 저장); :w! (강제); :x (수정 시에만 저장 & 종료); :qa! 모두 강제 종료; :wqa

:w | :q or ZZ
i / a / o / I / A / O

삽입 모드 진입: i 커서 앞 / a 커서 뒤; o / O 아래/위 새 줄; I/A 행의 시작/끝.

i edit here => o new line + insert => I line-beginning => A line-end
<Esc> / Ctrl-[

일반(Normal) 모드로 돌아갑니다(Ctrl-c / Ctrl-[ 도 사용). 보류 중인 연산자를 취소합니다.

i Hello<Esc> ; then :w

커서 이동

h / j / k / l

한 글자 좌 / 하 / 상 / 우 이동. (방향키도 동작합니다.)

5j — move 5 lines down
w / b / e / W / B / E

단어 단위로 이동(구두점과 공백을 구분); W/B/E 는 공백 구분 단어.

wdw ; 3W to third whitespace-word forward
0 / $ / ^

행의 시작 / 행의 끝 / 첫 비공백 문자.

0 to start ; $ to end ; ^ to first non-blank
gg / G / :N

첫 줄 / 마지막 줄 / N 행으로 점프. 비율(50%) 로 이동도 가능.

gg=G format the entire file (with =)
H / M / L / Ctrl-d / Ctrl-u

화면의 위 / 중간 / 아래(H/M/L); 반 페이지 아래(Ctrl-d) / 위(Ctrl-u).

Ctrl-d and Ctrl-u to scan; 10Ctrl-f full page forward
{ / } / ( / )

문단(중괄호) 또는 문장(괄호, ASCII 텍스트) 단위로 점프.

5{ ; 2} to jump two paragraphs forward
f<char> / F<char> / t / T ; ; / ,

현재 행에서 다음 문자를 찾기(f) / 역방향(F); ; / , 로 반복. t/T 는 직전에서 멈춤.

f, brings the cursor to the next comma ; df, deletes through next comma

삽입 모드

Ctrl-h / Ctrl-w / Ctrl-u

입력 중 백스페이스 / 단어 삭제 / 행 삭제 — 코드용 vim 을 인체공학적으로 만듭니다.

i hello world<Ctrl-w> leaves 'hello '
Ctrl-o <cmd> / Ctrl-r <reg>

일반 모드 명령을 한 번 실행(Ctrl-o); 삽입 모드에서 레지스터를 붙여넣기(Ctrl-r).

Ctrl-r =expr 로 표현식을 즉석에서 평가

Ctrl-r " the unnamed register ; Ctrl-r 0 from the yank register ; Ctrl-r =5+5 to insert 10

편집 연산자

d / x / X / c

삭제 / 커서 아래 글자 삭제 / 커서 앞 글자 삭제 / 변경(삭제 + 삽입). 이동과 결합: dw/xp/c$.

dd 행 삭제; cc 행 변경; D 줄 끝까지 삭제; C 줄 끝까지 변경

dw | dw$ | dw | 3dd | C reformat current line
y / yy / Y

얀크(복사). yy / Y 는 현재 행을 얀크; y$ / yW 등은 이동을 받음.

y2w yy p gp — yank 2 words, line, paste, paste below without moving cursor
p / P / gp / gP

커서 뒤(p) / 앞(P) 에 붙여넣기. gp/gP 는 커서를 붙여넣은 텍스트 끝에 둡니다.

p below current ; P above ; gp after, cursor at end
u / Ctrl-r / U

실행 취소 / 다시 실행(Ctrl-r). U 는 행을 원래 상태로 복구(반복 가능한 카운트 권장).

u u u ; Ctrl-r Ctrl-r ; 5u to undo last 5 changes
. / @: / q:

마지막 편집 반복(.) — 매우 강력. @: 는 최근 매크로 반복; q: 는 명령 히스토리를 엽니다.

i Monday<Esc> ; then . . . . across several lines
r / R / J / gq

한 글자 치환(r<char>) / 치환 모드(R) / 행 결합(J, gJ 는 공백 없이) / 서식(gq{이동}).

raZ to change one char ; J to join ; gqap format the current paragraph

들여쓰기

>> / << / = / :set autoindent

들여쓰기 / 내어쓰기 / 자동 들여쓰기(=). 이동과 결합: =G 는 끝까지; `gg=G` 는 전체 서식.

5>> indent 5 lines ; =ap auto-indent paragraph ; gg=G format buffer (whole file)

검색 & 치환

/pat / ?pat / n / N

앞으로(/) / 뒤로(?) 검색; n / N 은 같은 / 반대 방향으로 반복.

/\<word\> 단어 경계; \v very-magic regex; \c 대소문자 무시; \C 대소문자 구분

/TODO\c ; n next ; N previous ; * / # to search the word under cursor
* / # / g* / g#

커서 아래 단어를 검색: * 앞으로(# 뒤로). g* 는 인접 경계도 포함.

Hover on foo then * — jumps to next foo, n continues
:%s/pat/rep/g / :5,12s/foo/bar/g

치환 — 전역, 범위, 플래그, 매치마다 확인 가능.

%s / g 전역; /c 확인; /i 대소문자 무시; /I 대소문자 구분; /e 에러 무시; /n 개수만

:%s/\bfoo\b/bar/gc — replace whole word "foo" with "bar", confirm each
:g/pat/d / :v/pat/m$

매치에 대해 연산: :g/pat/d 매치 행 삭제; :v/pat/m$ 비매치 행을 끝으로 이동.

:v/^#\|^$/d delete all comment-blank only lines

버퍼, 탭, 윈도우

:e file / :b<N> / :bn :bp :ls

다른 파일 열기(:e), 목록(`:ls`), ID 로 버퍼 이동(`:b 3`), 다음/이전(`:bn`/`bp`).

:e . 파일 탐색기; :bd 현재 버퍼 삭제; :bn! 강제; hidden

:e src/index.ts :ls :b 3 :bp :bn
:sp :vs / Ctrl-w j/k/h/l

수평/수직 분할; Ctrl-w + 이동 으로 윈도우 사이를 이동.

:vs src/index.ts | Ctrl-w l | Ctrl-w j — work in adjacent panes
:tabnew / gt / gT / :tabclose

태스크당 하나의 버퍼 화면이 필요할 때 탭을 사용.

:tabnew README.md gt gT :tabclose :tabonly

보기 & 설정

:set nu / :set relativenumber

행 번호 토글; `relativenumber` 는 커서로부터의 거리(이동과 함께 최고).

:set relativenumber && 5j will count in your head
:set syntax on / :set filetype=ts

구문 강조 켜기 / 확장자 없는 파일의 파일 타입 강제.

:set ft=markdown ; :set bg=dark for dark mode
:set paste / :set wrap / :set hlsearch

붙여넣기 토글: paste 는 자동 들여쓰기를 막음. hlsearch 는 매치를 유지.

:noh 지금 강조 해제

:set paste then i<Ctrl-r>+ in some terminals

비주얼 & 블록 모드

v / V / Ctrl-v

비주얼 / 행 비주얼 / 블록 비주얼 — 블록은 텍스트의 열 단위 편집을 가능하게 합니다.

v -> o 비주얼 모드에서 선택 영역의 끝점 토글

Ctrl-v 5j I // Esc — prepend // to 6 lines (classic comment-uncomment)
gv / o (in visual)

이전 비주얼 영역을 다시 선택; `o` 는 선택 영역의 활성 끝을 토글합니다.

Make a block selection, change something, run the same edit again with .

레지스터 & 매크로

"ayy / "ap / :reg

이름 있는 레지스터 a 에 얀크한 뒤 a 에서 붙여넣기. :reg 는 모든 레지스터를 나열.

"0 마지막 얀크; "_ 블랙홀; "+ 시스템 클립보드 (+clipboard 빌드일 때)

"ayy "ap ; :reg to list named, 0, +, *
q<reg> ... q / @<reg> / @@

<reg> 레지스터에 매크로를 녹화하고 @<reg> 로 재생; @@ 는 마지막 매크로를 반복.

qa I" <Esc> $ " <Esc> q 5j @a — quote cells across rows

외부

:!cmd / :r !cmd

Vim 안에서 셸 명령 실행; :r !cmd 는 그 출력을 삽입.

:r !date ; :!%:clean :r ...
:r file / :source file.vim

커서 위치에 파일 내용 삽입; :source 는 Vim 스크립트(.vimrc, 플러그인) 실행.

:r ~/.vimrc to paste whole config; :runtime! syntax/foo.vim
:help <topic>

Vim 의 오프라인 도움말은 훌륭합니다. `Ctrl-]` 는 커서 아래 태그로 점프.

:help gq :help motion.txt :help :terminal — open terminal-in-vim (8.0+)
:terminal

임베디드 터미널을 엽니다(Vim 8+ / Neovim).

:vert terminal 수직 분할; :term bash; Ctrl-w N : 터미널 모드 종료

:vert term bash :resize 15 && run tests live

치트시트 버전 1.0.0

Vim 9 / Neovim 0.9+ 대응