이 글은 Vim 단축키 시리즈의 첫 번째 글이다.
- Vi/Vim 단축키 종합 가이드: 기본부터 실전까지 ← 현재 글
- Neovim 단축키 가이드: Vim을 넘어서는 기능들
Vim의 언어: 동사 + 명사
Vim의 단축키는 외워야 하는 목록이 아니라 문법이다.
동사(operator)는 “무엇을 할 것인가”:
| 동사 | 의미 |
|---|---|
d | 삭제 (delete) |
c | 변경 (change) — 삭제 후 Insert |
y | 복사 (yank) |
> | 들여쓰기 |
< | 내어쓰기 |
gU | 대문자로 |
gu | 소문자로 |
= | 자동 정렬 |
명사(motion/text object)는 “어디까지”:
| 명사 | 의미 |
|---|---|
w | 다음 단어까지 |
$ | 줄 끝까지 |
gg | 파일 처음까지 |
% | 매칭 괄호까지 |
iw | 단어 안쪽 (inner word) |
i" | 따옴표 안쪽 |
a( | 괄호 포함 전체 |
동사와 명사를 조합하면 된다:
d + iw = diw → 단어 삭제
c + i" = ci" → 따옴표 안 내용 변경
y + $ = y$ → 줄 끝까지 복사
> + ap = >ap → 문단 들여쓰기
gU + iw = gUiw → 단어 대문자로
이 문법을 이해하면 수백 개의 조합을 암기 없이 만들어낼 수 있다.
모드
Vim은 모드 기반 에디터다. 같은 키가 모드에 따라 다르게 동작한다.
| 모드 | 진입 | 역할 |
|---|---|---|
| Normal | Esc | 이동, 편집 명령 실행 |
| Insert | i, a, o 등 | 텍스트 입력 |
| Visual | v, V, Ctrl-v | 영역 선택 |
| Command-line | :, /, ? | 명령 실행, 검색 |
| Replace | R | 덮어쓰기 입력 |
Insert 모드 내 단축키
Insert 모드에서도 몇 가지 유용한 키가 있다:
| 키 | 동작 |
|---|---|
Ctrl-w | 커서 앞 단어 삭제 |
Ctrl-u | 커서 앞 줄 전체 삭제 |
Ctrl-r " | 레지스터 내용 붙여넣기 |
Ctrl-o | Normal 모드 명령 1회 실행 후 Insert 복귀 |
Ctrl-t | 들여쓰기 |
Ctrl-d | 내어쓰기 |
이동 — 기본
k
↑
h ← → l
↓
j
숫자를 앞에 붙이면 반복된다: 5j(5줄 아래), 10k(10줄 위).
이동 — 단어
| 키 | 동작 |
|---|---|
w | 다음 단어 시작 |
b | 이전 단어 시작 |
e | 현재/다음 단어 끝 |
ge | 이전 단어 끝 |
W/B/E | WORD 단위 (공백 기준으로만 구분) |
w와 W의 차이: hello-world에서 w는 -에서 멈추지만, W는 공백까지 건너뛴다.
이동 — 줄
| 키 | 위치 |
|---|---|
0 | 줄 맨 처음 (0번째 열) |
^ | 줄 첫 번째 글자 (공백 제외) |
$ | 줄 끝 |
g_ | 줄 마지막 글자 (공백 제외) |
+ | 다음 줄 첫 글자 |
- | 이전 줄 첫 글자 |
이동 — 문자 찾기
줄 안에서 특정 문자로 이동하는 기능이다. 이동뿐 아니라 동사와 조합하면 강력해진다.
| 키 | 동작 |
|---|---|
f{char} | 오른쪽으로 {char} 위치로 이동 |
F{char} | 왼쪽으로 {char} 위치로 이동 |
t{char} | 오른쪽으로 {char} 앞까지 이동 |
T{char} | 왼쪽으로 {char} 뒤까지 이동 |
; | 같은 방향으로 반복 |
, | 반대 방향으로 반복 |
실전에서 자주 쓰는 조합:
dt) → 닫는 괄호 앞까지 삭제
cf, → 쉼표까지 변경 (쉼표 포함)
yt; → 세미콜론 앞까지 복사
vf" → 따옴표까지 선택
이동 — 괄호/블록
| 키 | 동작 |
|---|---|
% | 매칭 괄호로 점프 — (↔), {↔}, [↔] |
[{ | 현재 블록의 여는 {로 |
]} | 현재 블록의 닫는 }로 |
[( | 현재 블록의 여는 (로 |
]) | 현재 블록의 닫는 )로 |
%는 코드 읽을 때 특히 유용하다. 긴 함수의 시작 {에서 %를 누르면 닫는 }로 바로 이동한다.
이동 — 화면/파일
스크롤
| 키 | 동작 |
|---|---|
Ctrl-d | 반 페이지 아래 |
Ctrl-u | 반 페이지 위 |
Ctrl-f | 한 페이지 아래 |
Ctrl-b | 한 페이지 위 |
화면 내 이동
| 키 | 동작 |
|---|---|
H | 화면 상단 (High) |
M | 화면 중단 (Middle) |
L | 화면 하단 (Low) |
화면 정렬
| 키 | 동작 |
|---|---|
zz | 현재 줄을 화면 가운데로 |
zt | 현재 줄을 화면 상단으로 |
zb | 현재 줄을 화면 하단으로 |
파일 내 이동
| 키 | 동작 |
|---|---|
gg | 파일 처음 |
G | 파일 끝 |
{n}G | n번째 줄로 (:42와 동일) |
이동 — 검색
| 키 | 동작 |
|---|---|
/pattern | 아래로 검색 |
?pattern | 위로 검색 |
n | 다음 결과 |
N | 이전 결과 |
* | 커서 아래 단어를 아래로 검색 |
# | 커서 아래 단어를 위로 검색 |
gn | 다음 검색 결과를 Visual 선택 |
gd | 현재 파일에서 변수 선언으로 |
*와 #은 변수명 위에서 누르면 같은 이름을 바로 찾아준다. 검색어를 타이핑할 필요가 없다.
편집 — 삽입
| 키 | 위치 |
|---|---|
i | 커서 앞 |
a | 커서 뒤 |
I | 줄 첫 글자 앞 |
A | 줄 끝 |
o | 아래에 새 줄 |
O | 위에 새 줄 |
gi | 마지막 Insert 위치로 돌아가서 입력 |
gi는 편집 중 Normal로 돌아가서 다른 작업을 하다가, 다시 이전 편집 위치로 돌아갈 때 쓴다.
편집 — 삭제
삭제(d)는 동사다. 명사와 조합한다.
| 키 | 동작 |
|---|---|
x | 커서 아래 문자 |
X | 커서 앞 문자 |
dw | 다음 단어까지 |
de | 단어 끝까지 |
db | 이전 단어까지 |
dd | 줄 전체 |
D = d$ | 줄 끝까지 |
d0 | 줄 처음까지 |
d^ | 첫 글자까지 |
dG | 파일 끝까지 |
dgg | 파일 처음까지 |
diw | 단어 (inner) |
daw | 단어 + 주변 공백 (around) |
di" | 따옴표 안 |
di( | 괄호 안 |
편집 — 변경
변경(c)은 삭제 후 Insert 모드로 진입한다. d와 같은 문법이지만 바로 입력이 가능하다.
| 키 | 동작 |
|---|---|
cw | 단어 끝까지 변경 |
ciw | 단어 전체 변경 |
ci" | 따옴표 안 변경 |
ci( | 괄호 안 변경 |
cc | 줄 전체 변경 |
C = c$ | 줄 끝까지 변경 |
s | 문자 하나 변경 (= cl) |
S | 줄 전체 변경 (= cc) |
r{char} | 커서 문자를 {char}로 교체 (Normal 유지) |
R | Replace 모드 진입 (타이핑이 기존 텍스트를 덮어씀) |
ci"는 아마 Vim에서 가장 많이 쓰는 조합 중 하나다. 따옴표 안에 커서를 놓고 ci"를 누르면 안의 내용이 지워지고 바로 새 내용을 입력할 수 있다.
편집 — 복사/붙여넣기
| 키 | 동작 |
|---|---|
yy | 줄 복사 |
yw | 단어 복사 |
y$ | 줄 끝까지 복사 |
yi" | 따옴표 안 복사 |
ya( | 괄호 포함 전체 복사 |
p | 커서 뒤에 붙여넣기 |
P | 커서 앞에 붙여넣기 |
]p | 들여쓰기 맞춰서 붙여넣기 |
[p | 위에 들여쓰기 맞춰서 붙여넣기 |
자주 쓰는 조합:
| 조합 | 결과 |
|---|---|
yyp | 현재 줄 복제 |
ddp | 현재 줄과 아래 줄 교환 |
xp | 커서 아래 두 문자 교환 |
편집 — 줄 조작
| 키 | 동작 |
|---|---|
J | 현재 줄과 아래 줄 합치기 (공백 추가) |
gJ | 줄 합치기 (공백 없이) |
>> | 현재 줄 들여쓰기 |
<< | 현재 줄 내어쓰기 |
5>> | 5줄 들여쓰기 |
== | 현재 줄 자동 정렬 |
=G | 현재 줄부터 파일 끝까지 자동 정렬 |
:m+1 | 현재 줄을 한 줄 아래로 이동 |
:m-2 | 현재 줄을 한 줄 위로 이동 |
>> 후에 .을 누르면 한 단계씩 더 들여쓴다. 들여쓰기 레벨을 조절할 때 편리하다.
편집 — 대소문자/숫자
| 키 | 동작 |
|---|---|
~ | 커서 아래 문자 대소문자 토글 |
gUiw | 단어 대문자로 |
guiw | 단어 소문자로 |
gU$ | 줄 끝까지 대문자로 |
gUU | 줄 전체 대문자로 |
guu | 줄 전체 소문자로 |
Ctrl-a | 커서 아래(또는 뒤) 숫자 +1 |
Ctrl-x | 커서 아래(또는 뒤) 숫자 -1 |
5Ctrl-a | 숫자 +5 |
Ctrl-a/Ctrl-x는 코드에서 인덱스나 포트 번호를 바꿀 때 유용하다. 커서가 숫자 위에 없어도, 같은 줄의 다음 숫자를 찾아서 변경한다.
반복의 힘: . 명령어
.은 마지막 편집 동작을 반복한다. Vim에서 가장 강력한 키 중 하나다.
패턴 1: 검색 + 반복 치환
1. * → 커서 아래 단어 검색
2. ciw → 단어 변경
3. 새 단어 → 입력
4. Esc → Normal 복귀
5. n → 다음 결과
6. . → 같은 변경 반복
n → . → n → .를 반복하면 원하는 것만 골라서 치환할 수 있다. :%s와 달리 하나씩 확인하면서 바꿀 수 있다.
패턴 2: 여러 줄에 같은 편집
1. A; → 줄 끝에 세미콜론 추가
2. Esc
3. j → 다음 줄
4. . → 같은 동작 반복
패턴 3: 점진적 들여쓰기
1. >> → 들여쓰기
2. . → 한 레벨 더
3. . → 한 레벨 더
.과 잘 어울리는 명령어
| 명령어 | .으로 반복하면 |
|---|---|
ciw + 입력 | 다른 단어를 같은 내용으로 변경 |
A; | 줄 끝에 세미콜론 추가 |
I// | 줄 앞에 주석 추가 |
dd | 줄 삭제 |
>> | 들여쓰기 |
r{char} | 문자 교체 |
텍스트 오브젝트
i(inner)는 안쪽만, a(around)는 주변 공백이나 구분자를 포함한다.
| 오브젝트 | inner (i) | around (a) | 대상 |
|---|---|---|---|
| 단어 | iw | aw | word |
| WORD | iW | aW | WORD (공백 구분) |
| 문장 | is | as | sentence |
| 문단 | ip | ap | paragraph |
" | i" | a" | “큰따옴표” |
' | i' | a' | ‘작은따옴표’ |
` | i` | a` | `백틱` |
( / ) | i( | a( | (소괄호) |
{ / } | i{ | a{ | {중괄호} |
[ / ] | i[ | a[ | [대괄호] |
< / > | i< | a< | <꺾쇠> |
| 태그 | it | at | HTML 태그 |
실전 조합:
ciw → 단어 내용 변경
da" → 따옴표 포함 삭제
vi( → 괄호 안 Visual 선택
yat → HTML 태그 전체 복사
>ip → 현재 문단 들여쓰기
gUiw → 단어 대문자로
Visual 모드 — 기본
세 가지 Visual 모드
| 키 | 모드 | 선택 단위 |
|---|---|---|
v | Visual | 문자 단위 |
V | Visual Line | 줄 단위 |
Ctrl-v | Visual Block | 사각형 블록 |
선택 확장
| 키 | 동작 |
|---|---|
o | 선택 영역의 양 끝을 토글 (시작↔끝 커서 이동) |
O | Visual Block에서 같은 줄의 반대쪽 모서리로 |
o는 선택을 시작한 후 반대 방향으로도 확장하고 싶을 때 쓴다.
모드 전환
선택을 유지한 채 모드를 바꿀 수 있다: v → V (문자→줄), V → Ctrl-v (줄→블록).
재선택
| 키 | 동작 |
|---|---|
gv | 마지막 Visual 선택 영역을 다시 선택 |
>로 들여쓰기 후 gv로 재선택하면 한 번 더 들여쓸 수 있다. gv → > → gv → >.
선택 + 모션
| 조합 | 결과 |
|---|---|
v2w | 2단어 선택 |
vit | 태그 안 선택 |
vi{ | 중괄호 안 선택 |
vap | 문단 선택 |
v$ | 줄 끝까지 선택 |
Visual 모드 — 선택 후 조작
영역을 선택한 후 사용할 수 있는 명령들:
기본 조작
| 키 | 동작 |
|---|---|
d | 삭제 |
c | 변경 (삭제 후 Insert) |
y | 복사 |
들여쓰기
| 키 | 동작 |
|---|---|
> | 한 레벨 들여쓰기 |
< | 한 레벨 내어쓰기 |
3> | 3레벨 들여쓰기 |
V로 여러 줄을 선택하고 >를 누르면 일괄 들여쓰기. .으로 반복 가능.
대소문자
| 키 | 동작 |
|---|---|
~ | 대소문자 토글 |
U | 전부 대문자 |
u | 전부 소문자 |
정렬과 외부 명령
| 키 | 동작 |
|---|---|
= | 자동 정렬 (indentation) |
J | 선택한 줄 합치기 |
!sort | 선택 영역을 알파벳 정렬 |
!sort -n | 숫자 정렬 |
!column -t | 컬럼 정렬 (표 형태) |
ex 명령
선택 후 :를 누르면 :'<,'>가 자동 입력된다. 선택 범위에 ex 명령을 적용할 수 있다.
:'<,'>s/old/new/g " 선택 영역에서 치환
:'<,'>normal A; " 선택한 모든 줄 끝에 ; 추가
:'<,'>normal I// " 선택한 모든 줄 앞에 // 추가
컬럼 편집 (Visual Block) — 심화
Ctrl-v로 진입하는 Visual Block 모드는 사각형 영역을 선택한다. 일반 에디터의 “멀티 커서"와 비슷한 결과를 만들 수 있다.
컬럼 선택
Ctrl-v → Visual Block 진입
j/k → 위아래 행 확장
l/h → 좌우 열 확장
$ → 각 줄 끝까지 (줄 길이 달라도 OK)
다중 행 앞에 삽입
여러 줄 앞에 동시에 텍스트를 넣는다.
1. Ctrl-v → Visual Block 진입
2. jjj → 4줄 선택
3. I → 맨 앞에 Insert
4. // (스페이스) → 입력
5. Esc → 모든 줄에 적용
예: 주석 추가
실행 전: 실행 후:
let a = 1 // let a = 1
let b = 2 // let b = 2
let c = 3 // let c = 3
let d = 4 // let d = 4
다중 행 끝에 추가
1. Ctrl-v → Visual Block 진입
2. jjj → 4줄 선택
3. $ → 각 줄 끝까지 (길이 달라도 OK)
4. A → 끝에 Append
5. ; → 입력
6. Esc → 모든 줄에 적용
컬럼 삭제
선택한 사각형 영역을 통째로 삭제한다.
1. Ctrl-v → Visual Block 진입
2. jjj → 행 선택
3. ll → 열 확장
4. d → 삭제
예: 들여쓰기 일괄 제거
실행 전: 실행 후:
line 1 line 1
line 2 line 2
line 3 line 3
4칸 공백 위치에 Ctrl-v → jj → lll → d.
예: 주석 일괄 제거
실행 전: 실행 후:
// let a = 1 let a = 1
// let b = 2 let b = 2
// let c = 3 let c = 3
// 위에 Ctrl-v → jj → ll → d.
컬럼 치환
선택한 사각형 영역을 새로운 텍스트로 교체한다.
1. Ctrl-v → Visual Block 진입
2. jjj → 행 선택
3. e → 단어 끝까지 열 확장
4. c → 변경
5. newText → 새 텍스트 입력
6. Esc → 모든 줄에 적용
컬럼 문자 교체
선택 영역의 모든 문자를 같은 문자로 바꾼다.
1. Ctrl-v → 블록 선택
2. r- → 모든 문자를 -로 교체
구분선을 만들거나, 공백을 특정 문자로 채울 때 유용하다.
컬럼 들여쓰기
1. Ctrl-v → Visual Block 진입
2. jjj → 행 선택
3. > → 들여쓰기
4. gv → 재선택
5. > → 한 레벨 더
또는 V → jjj → 3>로 3레벨 한 번에 들여쓰기.
컬럼 대소문자
Ctrl-v → 영역 선택 → ~ (토글)
Ctrl-v → 영역 선택 → U (대문자)
Ctrl-v → 영역 선택 → u (소문자)
순차 번호 매기기
g Ctrl-a는 Visual Block으로 선택한 숫자들을 순차적으로 증가시킨다.
실행 전 (모두 0): 실행 후:
0. item 1. item
0. item 2. item
0. item 3. item
0. item 4. item
방법: Ctrl-v → jjj (0들을 선택) → g Ctrl-a.
실전 예제 모음
| 상황 | 방법 |
|---|---|
여러 줄 앞에 // 주석 | Ctrl-v → jjj → I → // → Esc |
여러 줄 // 주석 제거 | Ctrl-v → jjj → ll → d |
여러 줄 끝에 ; 추가 | Ctrl-v → jjj → $ → A → ; → Esc |
| CSV 특정 컬럼 삭제 | 해당 열에 Ctrl-v → G → d |
| 변수명 일괄 교체 | 해당 열에 Ctrl-v → jjj → e → c → 새 이름 → Esc |
| 여러 줄 들여쓰기 | Ctrl-v → jjj → > (또는 V → jjj → >) |
| 0부터 순차 번호 | 0을 입력 → 복사해서 여러 줄 → Ctrl-v로 선택 → g Ctrl-a |
| HTML 속성 일괄 추가 | 태그 뒤에 Ctrl-v → jjj → A → class="new" → Esc |
검색과 치환
검색
| 키 | 동작 |
|---|---|
/pattern | 아래 방향 검색 |
?pattern | 위 방향 검색 |
n | 다음 결과 |
N | 이전 결과 |
* | 커서 아래 단어 검색 (아래로) |
# | 커서 아래 단어 검색 (위로) |
치환
:s/old/new/ " 현재 줄, 첫 번째만
:s/old/new/g " 현재 줄, 전체
:%s/old/new/g " 파일 전체
:%s/old/new/gc " 파일 전체, 하나씩 확인
:'<,'>s/old/new/g " Visual 선택 영역
:5,20s/old/new/g " 5~20번째 줄
정규식 기초
| 패턴 | 의미 |
|---|---|
. | 아무 문자 1개 |
.* | 아무 문자 0개 이상 |
\d | 숫자 |
\w | 영문/숫자/밑줄 |
\s | 공백 |
^ | 줄 시작 |
$ | 줄 끝 |
\(\) | 캡처 그룹 |
\1 | 첫 번째 캡처 역참조 |
예: 순서 뒤집기
:%s/\(\w\+\), \(\w\+\)/\2, \1/g
" "Kim, John" → "John, Kim"
다중 줄 일괄 편집 (ex 명령)
특정 줄 범위나 패턴에 매칭되는 줄에 일괄 명령을 적용한다.
줄 범위 조작
| 명령 | 동작 |
|---|---|
:5,20d | 5~20줄 삭제 |
:5,20y | 5~20줄 복사 |
:10,20m30 | 10~20줄을 30줄 뒤로 이동 |
:10,20co30 | 10~20줄을 30줄 뒤에 복사 |
:g (global) — 패턴 매칭 일괄 실행
:g/pattern/d " pattern 포함 줄 전부 삭제
:v/pattern/d " pattern 미포함 줄 전부 삭제 (v = inverse)
:g/TODO/normal A; " TODO 포함 줄 끝에 ; 추가
:g/^$/d " 빈 줄 전부 삭제
:g/console.log/d " console.log 줄 전부 삭제
:normal — 줄 범위에 Normal 명령
:5,20normal >> " 5~20줄 들여쓰기
:5,20normal I// " 5~20줄 앞에 // 추가
:5,20normal A; " 5~20줄 끝에 ; 추가
:5,20normal dd " 5~20줄 삭제
:g와 :normal을 조합하면 Vim 안에서 거의 모든 일괄 편집이 가능하다.
매크로
매크로는 키 입력을 녹화하고 재생하는 기능이다.
기본 사용법
1. qa → a 레지스터에 녹화 시작
2. (편집 동작) → 원하는 작업 수행
3. q → 녹화 종료
4. @a → 매크로 실행
5. @@ → 마지막 매크로 반복
6. 10@a → 10회 반복 실행
실전 예제: CSV를 SQL INSERT로 변환
원본:
John,30,Seoul
Jane,25,Busan
변환 결과:
INSERT INTO users VALUES ('John', 30, 'Seoul');
INSERT INTO users VALUES ('Jane', 25, 'Busan');
첫 줄에서 매크로를 녹화하고, 나머지 줄에 @a로 적용하면 된다.
재귀 매크로
매크로 안에서 자기 자신을 호출할 수 있다:
qaq → a 레지스터 초기화
qa → 녹화 시작
(편집 동작)
j → 다음 줄
@a → 자기 자신 호출
q → 녹화 종료
@a → 실행 (파일 끝까지 반복)
파일 끝에 도달하면 j가 실패해서 자동으로 멈춘다.
레지스터
Vim은 삭제하거나 복사한 텍스트를 여러 레지스터에 저장한다.
| 레지스터 | 이름 | 용도 |
|---|---|---|
"" | 무명 | 마지막 d/c/y 결과 |
"0 | yank | 마지막 y 결과만 (d/c 제외) |
"1~"9 | 숫자 | 최근 삭제 이력 |
"+ | 시스템 클립보드 | OS 복사/붙여넣기 |
"a~"z | 이름 지정 | 사용자 지정 저장 |
"A~"Z | 이름 추가 | 기존 레지스터에 추가(append) |
"_ | 블랙홀 | 삭제해도 어디에도 저장 안 됨 |
"/ | 검색 | 마지막 검색 패턴 |
": | 명령 | 마지막 ex 명령 |
". | 입력 | 마지막 Insert 입력 |
사용법
"ay → a 레지스터에 복사
"ap → a 레지스터에서 붙여넣기
"+y → 시스템 클립보드에 복사
"+p → 시스템 클립보드에서 붙여넣기
"_dd → 줄 삭제하되 레지스터 건드리지 않기
:reg → 모든 레지스터 확인
"0이 유용한 상황: yy로 복사한 후 dd로 다른 줄을 삭제하면, p는 삭제한 줄을 붙여넣는다. 원래 복사한 줄을 붙여넣으려면 "0p.
마크
파일 내 위치를 북마크처럼 저장한다.
| 키 | 동작 |
|---|---|
m{a-z} | 현재 위치를 로컬 마크로 저장 |
m{A-Z} | 현재 위치를 글로벌 마크로 저장 (파일 간 이동 가능) |
`a | 마크 a의 정확한 위치로 이동 |
'a | 마크 a가 있는 줄의 처음으로 이동 |
:marks | 마크 목록 보기 |
자동 마크
Vim이 자동으로 설정하는 마크:
| 마크 | 위치 |
|---|---|
`. | 마지막 편집 위치 |
`" | 마지막으로 파일을 닫았던 위치 |
`[ | 마지막 변경/붙여넣기 시작 |
`] | 마지막 변경/붙여넣기 끝 |
'' | 마지막 점프 이전 위치 |
''(작은따옴표 두 번)는 “아까 있던 곳으로 돌아가기”. 검색이나 G로 이동한 후 원래 위치로 돌아갈 때 쓴다.
윈도우/버퍼/탭
버퍼
열려 있는 파일 목록이다.
| 명령 | 동작 |
|---|---|
:e file | 파일 열기 |
:ls | 열린 버퍼 목록 |
:bn / :bp | 다음 / 이전 버퍼 |
:bd | 현재 버퍼 닫기 |
:b{n} | n번 버퍼로 이동 |
:b name | 이름으로 버퍼 이동 (탭 자동완성) |
윈도우
화면을 분할해서 여러 파일을 동시에 본다.
| 명령 | 동작 |
|---|---|
:split / :sp | 가로 분할 |
:vsplit / :vs | 세로 분할 |
Ctrl-w h/j/k/l | 윈도우 간 이동 |
Ctrl-w = | 크기 동일하게 |
Ctrl-w o | 현재 윈도우만 남기고 닫기 |
Ctrl-w > / < | 너비 조절 |
Ctrl-w + / - | 높이 조절 |
Ctrl-w r | 윈도우 위치 회전 |
탭
| 명령 | 동작 |
|---|---|
:tabnew | 새 탭 |
gt / gT | 다음 / 이전 탭 |
:tabclose | 탭 닫기 |
{n}gt | n번 탭으로 이동 |
접기 (Folding)
코드의 일부를 접어서 숨길 수 있다.
| 키 | 동작 |
|---|---|
zf{motion} | 접기 생성 (예: zfap 문단 접기) |
za | 접기 토글 |
zo | 접기 열기 |
zc | 접기 닫기 |
zR | 전체 열기 |
zM | 전체 닫기 |
zj | 다음 접기로 이동 |
zk | 이전 접기로 이동 |
실전 편집 레시피
“이걸 하고 싶은데 어떻게?” 상황별 단축키 조합:
| 하고 싶은 것 | 방법 |
|---|---|
| 이 단어를 전부 바꾸고 싶다 | * → ciw → 새 단어 → Esc → n → . 반복 |
| 여러 줄 앞에 주석 추가 | Ctrl-v → jjj → I → // → Esc |
| 여러 줄 주석 제거 | Ctrl-v → jjj → ll → d |
| 괄호 안 내용만 교체 | ci( |
| 따옴표 안 내용 복사 | yi" |
| 태그 안 내용 삭제 | dit |
| 현재 줄 복제 | yyp |
| 두 줄 순서 바꾸기 | ddp |
| 여러 줄 들여쓰기 | V → jjj → > (반복: .) |
| 여러 줄 내어쓰기 | V → jjj → < |
| 선택 영역 정렬 | V → 선택 → !sort |
| 단어를 대문자로 | gUiw |
| 줄 전체 대문자로 | gUU |
| 0~N 순차 번호 매기기 | 0 여러 줄 → Ctrl-v로 선택 → g Ctrl-a |
| 함수 블록 전체 복사 | 여는 {에서 V → % → y |
| 빈 줄 전부 삭제 | :g/^$/d |
| TODO 줄만 남기기 | :v/TODO/d |
| console.log 전부 삭제 | :g/console.log/d |
| 5~20줄에 주석 추가 | :5,20normal I// |
마치며
이 글에서 다룬 것은 모두 Vi/Vim에서 동작하는 보편적인 단축키다. Neovim, Vim, Vi 어디서든 쓸 수 있다.
핵심은 세 가지:
- 문법을 이해하라 — 동사 + 명사 조합을 알면 암기량이 줄어든다
.을 습관화하라 — 반복 가능한 편집을 만들면 생산성이 올라간다- Visual Block을 익혀라 — 멀티 커서 없이도 다중 행 편집이 가능하다
다음 글에서는 Neovim만의 단축키를 다룬다. LSP, 터미널, 플러그인, 마우스 활용까지.