본문으로 건너뛰기

"단축키" 태그로 연결된 6개 게시물개의 게시물이 있습니다.

모든 태그 보기

LazyVim 키맵 치트시트

· 약 5분

이 글은 Vim/Neovim 단축키 시리즈의 세 번째 글입니다.

  1. Vi/Vim 단축키 종합 가이드: 기본부터 실전까지
  2. Neovim 단축키 가이드: Vim을 넘어서는 기능들
  3. LazyVim 키맵 치트시트 ← 현재 글

함께 읽기: LazyVim distro로 갈아타기

들어가며

LazyVim에서 키 외울 일은 사실 거의 없어요. <Space>를 누르고 잠깐 기다리면 which-key가 카테고리별 메뉴를 띄워 주고, <Space>sk로 키맵을 검색할 수도 있어요. 그래도 매일 자주 누르는 키는 손이 기억하는 편이 빨라요. 이 글은 그 "매일 누르는 키"만 모아 둔 치트시트예요.

Leader 키는 Space입니다. 아래 표의 <Space>가 모두 leader라고 보면 됩니다.

직전 수동 셋업의 키맵과는 다른 기본값이 많습니다. 새로 외우거나 같은 키에 다른 의미를 매핑하지 말고, LazyVim 기본을 그대로 쓰는 편을 권장합니다. 이미 합의된 컨벤션을 그대로 쓰는 편이 손이 덜 갑니다.

파일 트리 (neo-tree)

동작
<Space>e트리 토글 (열기/닫기 + 포커스)
<Space>Ecwd 기준 트리 (root와 다를 때)

트리 안에서:

동작
<CR>파일 열기
a추가
d삭제
r이름 변경
q닫기
H숨김파일 토글

<Space>e는 가장 자주 누르는 키 중 하나입니다. 토글이라 한 번 더 누르면 닫힙니다.

창 이동 (트리 ↔ 에디터)

동작
<C-h> / <C-l>왼/오 창 이동 (트리 ↔ 에디터 복귀에 가장 자주)
<C-j> / <C-k>아래/위 창
<C-w>=창 크기 균등화
<C-w>q현재 창 닫기

<C-w> 접두사를 누르고 다음 키를 눌러도 같은 동작이지만, <C-h/j/k/l> 직접 매핑이 손가락에 더 빠릅니다. LazyVim이 이미 잡아 준 키입니다.

파일/검색 (snacks.picker)

동작
<Space><Space>파일 찾기 (가장 빠른 진입)
<Space>ff / <Space>fF파일 찾기 (root / cwd)
<Space>sg내용 grep (live grep)
<Space>fr최근 파일

직전 셋업에서 Telescope의 <leader>ff/<leader>fg 조합을 썼다면 의미가 거의 그대로 옮겨 옵니다. 차이는 두 가지입니다. leader는 동일하게 Space이고, grep 키는 <Space>fg 대신 <Space>sg로 옮겨졌습니다(s = search 카테고리).

가장 짧은 진입은 **<Space><Space>**입니다. 두 번 두드리면 바로 파일 picker가 뜹니다.

버퍼/탭

동작
<S-h> / <S-l>이전/다음 버퍼
<Space>,버퍼 목록에서 선택
<Space>bd현재 버퍼 닫기

<S-h>/<S-l>은 Shift + h/l. 이게 LazyVim에서 버퍼 전환의 표준입니다. 바로 옆 버퍼로 점프할 일이 압도적으로 많아서 두 키만 외워도 대부분 커버됩니다.

코드 (LSP)

동작
gd정의로 점프
gr참조 찾기
gI구현으로 점프
K호버 문서
<Space>ca코드 액션
<Space>crrename
<Space>cf포맷
]d / [d다음/이전 진단

gd로 점프한 뒤 <C-o>로 직전 위치로 돌아옵니다. 이건 Vim 자체의 점프 리스트라 LazyVim과 무관하게 동작합니다.

<Space>c 접두사는 Code 그룹이라 외우기 쉽습니다. ca = code action, cr = code rename, cf = code format.

Git

동작
<Space>gglazygit 실행
]h / [h다음/이전 hunk
<Space>gbline blame

<Space>gg를 가장 자주 누릅니다. lazygit TUI 안에서 stage, commit, push까지 다 처리합니다. nvim 본체로 돌아오면 gitsigns가 변경된 줄에 사이드 마커를 자동으로 표시해 주고, ]h/[h로 hunk 사이를 점프합니다.

기타

동작
<C-/>터미널 토글 (snacks.terminal, <Esc> 두 번 또는 <C-\><C-n>으로 빠져나옵니다)
<C-;>floaterm 토글 (사용자 추가)
<Space>lLazy 플러그인 매니저
<Space>cmMason (LSP/포매터 매니저)
<Space>w저장
<Space>qq전체 종료
<Space>uC컬러스킴 변경 (UI에서 라이브 프리뷰)
<Space>hsearch highlight 끄기 (사용자 추가)

<C-/><C-;>는 둘 다 터미널 토글이지만 띄우는 플러그인이 다릅니다(snacks.terminal vs vim-floaterm).

<Space>uC는 테마를 라이브 프리뷰로 바꿔 본 뒤 마음에 드는 것을 영구화할 때 편리합니다. 자세한 컬러스킴 셋업은 distro 갈아타기 글을 참고합니다.

자주 쓰는 명령

치트시트는 키 위주로 정리했지만, : 명령으로 자주 들어가는 곳도 같이 외워 두면 좋습니다.

명령동작
:LazyExtras추가 언어팩 ON/OFF UI
:MasonLSP/포매터/린터 설치 상태
:LazyHealth, :checkhealth의존성/문제 진단
:RenderMarkdown toggle마크다운 렌더링 잠시 끄기
:colorscheme <name>테마 즉시 전환

학습 팁

키를 외우려고 할 필요 없습니다. 다음 두 가지만 습관화하면 자동으로 박힙니다.

  1. <Space> 누르고 잠시 기다리기. f(파일)/b(버퍼)/c(코드)/g(git)/s(검색)/u(UI 토글) 메뉴가 뜨면 첫 글자 한 번 보고 다음 키를 누릅니다. 한 번에 다 외우려 하지 말고 매일 한 카테고리씩 훑어보면 됩니다.
  2. <Space>sk로 키맵 검색. "버퍼 닫는 키가 뭐였더라?" 싶을 때 <Space>sk → "buffer close"를 입력하면 매핑이 바로 뜹니다.

:verbose map <key>도 디버깅 단계에선 유용합니다. 어떤 플러그인이 해당 키를 가져갔는지 표시해 줍니다.

마치며

LazyVim의 키맵은 이미 합의된 컨벤션입니다. Telescope 시절의 <leader>ff/fg, neo-tree의 <leader>e, gitsigns의 ]h/[h 같은 묶음이 그대로 살아 있고, 거기에 snacks 계열 picker, dashboard, terminal이 같은 카테고리에 얹혀 있습니다. 손이 헷갈릴 일이 거의 없습니다.

새 머신에 LazyVim을 깔고 가장 먼저 손에 익히면 좋은 6개:

<Space><Space> — 파일 찾기
<Space>sg — 내용 grep
<Space>e — 트리 토글
<S-h> / <S-l> — 버퍼 이전/다음
gd — 정의 점프
<Space>gg — lazygit

이 여섯 개만 손에 박히면 매일 쓰는 키는 거의 다 커버됩니다. 나머지는 <Space> 누르고 기다리면 which-key가 알려줍니다.

전체 셋업 맥락은 LazyVim distro로 갈아타기 글에 정리해 두었어요.

참고

Claude Code 필수 단축키

· 약 5분

Claude Code 단축키 도움말 화면

Claude Code에서 ?를 누르면 볼 수 있는 단축키 요약 화면이에요.

Claude Code 단축키 도움말

이 화면에 나오는 것들을 하나씩 풀어서 정리해보겠습니다.

단축키를 왜 알아야 하나

Claude Code를 터미널에서 쓰다 보면, 마우스 없이 모든 걸 해결해야 하는 순간이 옵니다. 긴 프롬프트를 수정하고, 실행을 취소하고, 모델을 바꾸고, 히스토리를 뒤지는 일이 전부 키보드로 가능합니다.

문제는 단축키가 꽤 많다는 점입니다. 전부 외울 필요는 없습니다. 이 글에서는 매일 쓰게 되는 것만 추렸습니다.

이 시리즈는 3편으로 구성됩니다.

  • 1편: 필수 단축키 (이 글)
  • 2편: Vim 모드
  • 3편: 커스터마이징 & 세부 컨텍스트

macOS 터미널 설정부터

시작하기 전에 하나 짚고 가겠습니다. macOS에서 Option(Alt) 키 조합이 안 먹히는 경우가 많습니다. 터미널 설정을 먼저 바꿔야 합니다.

터미널설정 방법
iTerm2Settings → Profiles → Keys → Left/Right Option key → "Esc+"
Terminal.appSettings → Profiles → Keyboard → "Use Option as Meta Key" 체크
VS Code설정에서 "terminal.integrated.macOptionIsMeta": true 추가

이걸 안 하면 Option+P, Option+T 같은 단축키가 특수문자만 입력됩니다. 꼭 먼저 설정해야 합니다.

일반 제어

가장 자주 쓰는 기본 조작입니다.

단축키기능비고
Ctrl+C현재 입력 또는 실행 취소가장 많이 누르게 됨
Ctrl+DClaude Code 종료EOF 시그널
Ctrl+L입력창 내용 지우기대화 기록은 유지
Ctrl+R히스토리 역방향 검색이전 프롬프트를 찾을 때
Ctrl+O트랜스크립트 뷰어 토글도구 실행 상세 내용 확인
Ctrl+B실행 중인 작업 백그라운드로tmux 사용자는 두 번 눌러야 함
Ctrl+T태스크 목록 토글진행 상황 확인
Esc × 2되감기(Rewind) / 요약이전 상태로 복원

히스토리 검색 모드 (Ctrl+R 이후)

히스토리 검색에 진입하면 쓸 수 있는 키가 따로 있습니다.

단축키기능
Ctrl+R다음(이전) 매칭 결과로 이동
Tab 또는 Esc현재 결과 선택 후 편집 계속
Enter현재 결과 선택 후 바로 실행
Ctrl+C검색 취소, 원래 입력 복원

텍스트 편집

프롬프트가 길어질수록 이 단축키들이 빛을 발합니다.

단축키기능비고
Ctrl+K커서부터 줄 끝까지 삭제삭제된 텍스트 저장됨
Ctrl+U커서부터 줄 시작까지 삭제줄 전체 지울 때 유용
Ctrl+Y삭제한 텍스트 붙여넣기Ctrl+K/Ctrl+U로 지운 것
Alt+B한 단어 뒤로 이동macOS: Option 설정 필요
Alt+F한 단어 앞으로 이동macOS: Option 설정 필요
Ctrl+_실행 취소(Undo)Ctrl+Shift+-도 동일
Ctrl+S현재 프롬프트 임시 저장(Stash)나중에 다시 불러올 수 있음

Ctrl+K로 지우고 Ctrl+Y로 붙여넣는 조합은 터미널의 킬 링(kill ring)과 같은 원리입니다. 익숙해지면 마우스 드래그보다 빠릅니다.

멀티라인 입력

Claude Code에서 한 줄짜리 프롬프트만 쓰지는 않습니다. 여러 줄 입력하는 방법을 알아두어야 합니다.

방법단축키비고
이스케이프\ + Enter모든 터미널에서 동작
macOS 기본Option+EntermacOS 기본값
Shift+EnterShift+EnteriTerm2, WezTerm, Ghostty, Kitty
줄바꿈 문자Ctrl+J라인 피드
붙여넣기코드 블록 직접 붙여넣기코드, 로그 등

VS Code, Alacritty, Zed, Warp 터미널에서 Shift+Enter를 쓰려면 /terminal-setup을 실행해서 바인딩을 설치해야 합니다.

또 하나 유용한 단축키가 있습니다.

단축키기능
Ctrl+G 또는 Ctrl+X Ctrl+E외부 에디터에서 프롬프트 편집

프롬프트가 정말 길어지면 터미널에서 편집하는 게 고역입니다. 이 단축키를 누르면 기본 에디터(보통 vim이나 nano)가 열리고, 거기서 편하게 작성할 수 있습니다. 저장하고 나오면 바로 입력됩니다.

모드와 모델 전환

Claude Code를 쓰다가 모델을 바꾸거나 모드를 전환하고 싶을 때는 명령어를 칠 필요가 없습니다.

단축키기능비고
Shift+Tab권한 모드 순환default → acceptEdits → plan → auto → bypassPermissions
Option+P모델 전환프롬프트 유지한 채로 변경
Option+T확장 사고(Extended Thinking) 토글
Option+OFast 모드 토글

Windows/Linux에서는 Option 대신 Alt를 사용합니다.

Shift+Tab은 특히 자주 씁니다. 코드 수정이 맘에 안 들면 plan 모드로 바꿔서 계획을 먼저 세우게 하고, 빠르게 진행하고 싶으면 auto로 전환하는 식입니다.

입력 프리픽스

프롬프트 첫 글자에 따라 동작이 달라집니다.

프리픽스기능예시
/명령/스킬 메뉴 열기/help, /config, /doctor
!셸 명령 직접 실행!git status, !npm test
@파일 경로 자동완성@src/index.ts

!은 Claude에게 시키지 않고 직접 셸 명령을 실행할 때 씁니다. git status 같은 단순 확인을 AI한테 시키면 아깝습니다.

프롬프트 제안

Claude Code가 회색 텍스트로 다음 입력을 제안할 때가 있습니다.

기능
Tab 또는 제안 수락
Enter제안 수락 + 바로 전송
아무 키나 타이핑제안 무시

이미지 붙여넣기

스크린샷이나 이미지를 Claude에게 보여줘야 할 때도 있습니다.

단축키기능
Ctrl+V클립보드 이미지 붙여넣기
Cmd+ViTerm2에서 이미지 붙여넣기

붙여넣으면 [Image #N] 형태로 입력창에 표시됩니다.

확인/권한 다이얼로그

Claude가 파일을 수정하거나 명령을 실행하려 할 때 나오는 확인 창에서 쓸 수 있는 키입니다.

단축키기능
Y 또는 Enter승인
N 또는 Escape거부
/ 옵션 이동
Ctrl+E권한 설명 토글

한눈에 보기

마지막으로 매일 쓰는 것만 골라서 한 장에 정리했습니다.

[일반]
Ctrl+C .......... 취소
Ctrl+D .......... 종료
Ctrl+L .......... 입력 지우기
Ctrl+R .......... 히스토리 검색
Esc × 2 ........ 되감기

[편집]
Ctrl+K .......... 줄 끝까지 삭제
Ctrl+U .......... 줄 시작까지 삭제
Ctrl+Y .......... 붙여넣기 (킬 링)
Alt+B / Alt+F ... 단어 단위 이동
Ctrl+J .......... 줄바꿈

[전환]
Shift+Tab ....... 권한 모드 순환
Option+P ........ 모델 전환
Option+T ........ 사고 모드 토글
Option+O ........ Fast 모드 토글

[입력]
/ ............... 명령 메뉴
! ............... 셸 실행
@ ............... 파일 자동완성

다음 편 예고

2편에서는 Claude Code의 Vim 모드를 다뤄요. /config에서 활성화하면 Normal/Insert 모드 전환, h/j/k/l 내비게이션, 텍스트 오브젝트까지 전부 쓸 수 있어요. Vim 사용자라면 기대해도 좋아요.

이 글은 2026년 4월 기준 Claude Code v2.1.x 기준으로 작성되었습니다. 버전에 따라 단축키가 다를 수 있습니다. ?를 눌러 현재 환경의 단축키를 확인할 수 있습니다.

참고 자료

Claude Code 고급 단축키

· 약 4분

여기까지 왔다면

1편에서 필수 단축키를, 2편에서 Vim 모드를 다뤘어요. 3편에서는 키 바인딩 커스터마이징과 특정 화면에서만 쓰는 세부 컨텍스트 단축키를 정리해요.

이 시리즈는 3편으로 구성됩니다.

키 바인딩 커스터마이징

설정 파일 열기

Claude Code 안에서 /keybindings를 입력하면 ~/.claude/keybindings.json 파일이 열립니다. 없으면 자동 생성됩니다. 변경 사항은 재시작 없이 즉시 적용됩니다.

설정 형식

[
{
"key": "ctrl+enter",
"command": "chat:submit",
"when": "Chat"
},
{
"key": "ctrl+shift+k",
"command": "chat:clearInput",
"when": "Global"
}
]
  • key: 키 조합 (ctrl, alt, shift, meta + 키)
  • command: namespace:action 형식의 액션 이름
  • when: 적용 컨텍스트

바인딩 해제

특정 단축키를 비활성화하려면 commandnull로 설정합니다.

[
{
"key": "ctrl+s",
"command": null,
"when": "Chat"
}
]

사용 가능한 컨텍스트

컨텍스트설명
Global어디서나 동작
Chat채팅 입력 중
Autocomplete자동완성 메뉴
Confirmation확인/권한 다이얼로그
Settings설정 화면
Help도움말 화면
Transcript트랜스크립트 뷰어
HistorySearch히스토리 검색 모드
Tabs탭 내비게이션
Attachments이미지 첨부
Footer하단 바
MessageSelector메시지 선택 (되감기)
DiffDialog디프 뷰어
ModelPicker모델 선택
Scroll스크롤 모드
Plugin플러그인 관리자
Doctor/doctor 화면
ThemePicker테마 선택

바인딩 불가 키

다음 키는 터미널 수준에서 예약되어 있어 변경할 수 없습니다.

이유
Ctrl+C인터럽트 시그널 (하드코딩)
Ctrl+DEOF 시그널 (하드코딩)
Ctrl+MEnter와 동일 (터미널에서 둘 다 CR 전송)

설정 검증

/doctor

키 바인딩 설정에 문제가 있으면 /doctor에서 확인할 수 있습니다.

트랜스크립트 뷰어

Ctrl+O로 트랜스크립트 뷰어를 열면, Claude가 어떤 도구를 실행했는지 상세하게 볼 수 있습니다. MCP 호출 내용도 여기서 확인 가능합니다.

단축키기능
Ctrl+E전체 내용 펼치기/접기
/검색 모드 진입
n다음 검색 결과
N이전 검색 결과
q, Ctrl+C, Esc뷰어 닫기

풀스크린 모드에서 Ctrl+O를 반복하면 normal → transcript → focus view 순서로 전환됩니다.

디프 뷰어

Claude가 파일을 수정했을 때 나오는 디프 화면에서 쓸 수 있는 키입니다.

단축키기능
Esc디프 뷰어 닫기
/ 이전/다음 디프 소스
/ 이전/다음 파일
Enter디프 상세 보기

되감기 / 요약 (메시지 선택)

Esc × 2로 진입하는 메시지 선택 화면의 단축키입니다.

단축키기능
, K, Ctrl+P위로 이동
, J, Ctrl+N아래로 이동
Shift+K, Ctrl+↑맨 위로 점프
Shift+J, Ctrl+↓맨 아래로 점프
Enter메시지 선택

Vim 스타일의 J/K 이동도 지원하는 점이 눈에 띕니다.

스크롤 / 풀스크린 모드

풀스크린 렌더링이 활성화된 상태에서 사용 가능합니다.

단축키기능
PageUp반 화면 위로 스크롤
PageDown반 화면 아래로 스크롤
Ctrl+Home대화 맨 처음으로
Ctrl+End최신 메시지로 (자동 따라가기 재활성화)
Ctrl+Shift+C / Cmd+C선택한 텍스트 클립보드에 복사
마우스 휠한 줄씩 스크롤

이미지 첨부 내비게이션

이미지를 여러 장 붙여넣은 후 관리할 때 씁니다.

단축키기능
다음 첨부
이전 첨부
Backspace / Delete선택한 첨부 삭제
또는 Esc첨부 내비게이션 종료

PR 상태, 태스크 등이 표시되는 하단 바에서 쓸 수 있는 키입니다.

단축키기능
/ 항목 이동
/ 위/아래 탐색
Enter선택한 항목 열기
Esc선택 해제
Cmd+클릭 (Mac)PR 링크를 브라우저에서 열기

설정 화면

/config로 진입하는 설정 화면의 단축키입니다.

단축키기능
/검색 모드
R사용량 데이터 다시 로드
Enter저장 후 닫기
Esc변경사항 버리고 닫기

모델 선택

Option+P로 모델 선택 화면에 진입하면 다음 단축키를 쓸 수 있습니다.

단축키기능
노력 수준(effort) 낮추기
노력 수준 높이기

플러그인 관리자

단축키기능
Space플러그인 선택/해제
I선택한 플러그인 설치

터미널 멀티플렉서 충돌

tmux나 screen을 쓰고 있다면 일부 단축키가 충돌할 수 있습니다.

단축키충돌 대상해결법
Ctrl+Btmux 프리픽스두 번 눌러서 Claude Code로 전달
Ctrl+AGNU screen 프리픽스두 번 눌러서 전달
Ctrl+ZUnix 프로세스 일시정지 (SIGTSTP)의도치 않게 누르지 않도록 주의

tmux 사용자는 Ctrl+B를 백그라운드 전환에 쓸 때 항상 두 번 눌러야 한다는 것만 기억하면 됩니다.

한눈에 보기: 커스터마이징 요약

[키 바인딩]
/keybindings .... 설정 파일 열기
/doctor ......... 설정 검증
재시작 불필요 .... 변경 즉시 적용

[트랜스크립트 뷰어] (Ctrl+O)
/ ............... 검색
n / N ........... 다음/이전 결과
Ctrl+E .......... 전체 펼치기
q ............... 닫기

[디프 뷰어]
← / → .......... 디프 소스 전환
↑ / ↓ .......... 파일 전환
Esc ............. 닫기

[되감기] (Esc × 2)
J / K ........... 위/아래 이동
Enter ........... 선택

[주의: 멀티플렉서]
Ctrl+B .......... tmux와 충돌 (두 번 누르기)
Ctrl+A .......... screen과 충돌 (두 번 누르기)

시리즈를 마치며

3편에 걸쳐 Claude Code의 단축키를 정리했습니다. 솔직히 전부 외울 필요는 없습니다. 1편의 필수 단축키만 익혀도 충분하고, 나머지는 필요할 때 이 글을 찾아보면 됩니다.

한 가지 팁을 남기자면, Claude Code 안에서 ?를 누르면 현재 환경에서 쓸 수 있는 단축키가 바로 나옵니다. 이 글보다 그게 더 빠를 수 있습니다.

이 글은 2026년 4월 기준 Claude Code v2.1.x 기준으로 작성했어요. /keybindings 커스터마이징은 v2.1.18 이상이 필요해요.

참고 자료

Claude Code Vim 단축키

· 약 5분

Claude Code에 Vim이 있다고?

있어요. /config에서 에디터 모드를 Vim으로 바꾸면 돼요. 그 순간부터 Claude Code의 입력창이 Vim처럼 동작해요.

Normal 모드와 Insert 모드가 분리되고, h/j/k/l로 이동하고, dd로 줄을 지우고, ciw로 단어를 바꿀 수 있습니다. Vim 사용자라면 손에 익은 그대로입니다.

이 시리즈는 3편으로 구성됩니다.

  • 1편: 필수 단축키
  • 2편: Vim 모드 (이 글)
  • 3편: 커스터마이징 & 세부 컨텍스트

활성화 방법

Claude Code 실행 후 /config를 입력하고, Editor mode를 Vim으로 변경합니다. 별도 설치나 플러그인은 필요 없습니다.

참고로 Vim 모드와 일반 키 바인딩은 독립적으로 동작합니다. Vim 모드를 켜도 Ctrl+C, Ctrl+R 같은 일반 단축키는 그대로 쓸 수 있습니다.

모드 전환

Vim의 핵심은 모드입니다. Claude Code에서도 동일하게 적용됩니다.

Insert → Normal

동작
EscNormal 모드 진입

Normal → Insert

동작커서 위치
i커서 앞에서 입력 시작현재 위치
I줄 시작에서 입력 시작줄 맨 앞
a커서 뒤에서 입력 시작한 칸 뒤
A줄 끝에서 입력 시작줄 맨 뒤
o아래에 새 줄 열기새 줄
O위에 새 줄 열기새 줄

Vim을 써본 적이 있다면 완전히 같은 동작입니다. 처음이라면 i로 입력하고 Esc로 나온다는 것만 기억하면 됩니다.

내비게이션 (Normal 모드)

기본 이동

동작
h왼쪽
j아래
k
l오른쪽

화살표 키도 동작하지만, Vim을 쓰는 이유는 홈 로우에서 손을 떼지 않는 데 있지 않습니까.

단어 단위 이동

동작
w다음 단어 시작으로
e현재 단어 끝으로
b이전 단어 시작으로

줄 단위 이동

동작
0줄 맨 앞
$줄 맨 뒤
^첫 번째 비공백 문자

전체 이동

동작
gg입력 맨 처음
G입력 맨 끝

문자 점프

동작
f{문자}다음 해당 문자로 이동
F{문자}이전 해당 문자로 이동
t{문자}다음 해당 문자 바로 앞으로
T{문자}이전 해당 문자 바로 뒤로
;마지막 f/F/t/T 반복
,마지막 f/F/t/T 반대 방향

예를 들어 f=을 누르면 커서가 다음 = 문자로 점프합니다. ;을 누르면 그다음 =으로 계속 이동합니다. 긴 프롬프트에서 특정 위치를 빠르게 찾을 때 유용합니다.

히스토리 탐색

동작
j (맨 아래에서)이전 명령어로
k (맨 위에서)다음 명령어로

커서가 더 이상 이동할 수 없는 경계에 도달하면 명령어 히스토리를 탐색합니다.

편집 (Normal 모드)

삭제

동작
x커서 위 문자 삭제
dd줄 전체 삭제
D커서부터 줄 끝까지 삭제
dw다음 단어까지 삭제
de단어 끝까지 삭제
db이전 단어까지 삭제

변경 (삭제 후 Insert 모드 진입)

동작
cc줄 전체 변경
C커서부터 줄 끝까지 변경
cw다음 단어까지 변경
ce단어 끝까지 변경
cb이전 단어까지 변경

d는 삭제만 하고 Normal 모드에 남습니다. c는 삭제 후 바로 Insert 모드로 전환됩니다. 뭔가를 지우고 바로 다시 타이핑하려면 c 계열이 키 입력을 한 번 줄여줍니다.

복사 & 붙여넣기

동작
yy 또는 Y줄 전체 복사(yank)
yw다음 단어까지 복사
ye단어 끝까지 복사
yb이전 단어까지 복사
p커서 뒤에 붙여넣기
P커서 앞에 붙여넣기

기타 편집

동작
>>들여쓰기
<<내어쓰기
J아래 줄과 합치기
.마지막 편집 반복

.은 꽤 강력합니다. cw로 단어를 바꾼 뒤 .을 누르면 같은 동작을 반복하므로, 여러 곳에서 같은 수정을 할 때 시간을 아낄 수 있습니다.

텍스트 오브젝트

Vim의 진짜 힘은 텍스트 오브젝트에 있습니다. d, c, y 같은 오퍼레이터와 조합해 사용합니다.

단어

범위
iw단어 안쪽 (inner word)
aw단어 + 주변 공백 (a word)
iWWORD 안쪽 (공백 기준 단어)
aWWORD + 주변 공백

괄호 / 따옴표

범위
i" / a"큰따옴표 안쪽 / 포함
i' / a'작은따옴표 안쪽 / 포함
i( / a(소괄호 안쪽 / 포함
i[ / a[대괄호 안쪽 / 포함
i{ / a{중괄호 안쪽 / 포함

실전 조합 예시

입력동작
ciw커서 위 단어를 삭제하고 입력 모드
di"큰따옴표 안의 내용 삭제
ya(소괄호 포함해서 복사
ci{중괄호 안의 내용을 바꾸기

예를 들어 프롬프트에 "이전 파일을 수정해줘"라고 적었는데 따옴표 안의 내용만 바꾸고 싶다면, 따옴표 안에 커서를 두고 ci"를 누르면 됩니다. 따옴표 안의 텍스트가 지워지면서 바로 새 내용을 입력할 수 있습니다.

Normal 모드에서 도움말

동작
?도움말 메뉴 표시

Vim 모드에서 Normal 모드일 때 ?를 누르면 현재 환경에서 사용 가능한 단축키 목록을 볼 수 있습니다.

한눈에 보기

[모드 전환]
Esc ............. Normal 모드
i / a ........... Insert 모드 (앞/뒤)
I / A ........... Insert 모드 (줄 시작/끝)
o / O ........... 새 줄 열기 (아래/위)

[이동]
h/j/k/l ........ 좌/하/상/우
w / e / b ...... 단어 (시작/끝/이전)
0 / $ / ^ ...... 줄 (맨앞/맨뒤/첫글자)
gg / G ......... 전체 (처음/끝)
f{c} / t{c} .... 문자 점프

[편집]
x .............. 문자 삭제
dd / D ......... 줄 삭제 / 줄끝까지
cc / C ......... 줄 변경 / 줄끝까지
yy / p / P ..... 복사 / 붙여넣기
. .............. 마지막 편집 반복

[텍스트 오브젝트]
ciw ............ 단어 변경
di" ............ 따옴표 안 삭제
ci( ............ 괄호 안 변경
ya{ ............ 중괄호 포함 복사

다음 편 예고

3편에서는 커스터마이징과 세부 컨텍스트 단축키를 다뤄요. keybindings.json으로 키를 재설정하는 방법, Transcript Viewer, Diff Viewer, 스크롤 모드 등 특정 상황에서만 쓰는 단축키를 정리할게요.

이 글은 2026년 4월 기준 Claude Code v2.1.x 기준으로 작성되었습니다. Vim 모드는 /config → Editor mode에서 활성화할 수 있습니다.

참고 자료

Neovim 단축키 가이드

· 약 9분

이 글은 Vim 단축키 시리즈의 두 번째 글이에요.

  1. Vi/Vim 단축키 종합 가이드: 기본부터 실전까지
  2. Neovim 단축키 가이드: Vim을 넘어서는 기능들 ← 현재 글

Vi와 뭐가 다른가

1편에서 다룬 단축키는 Vi/Vim 어디서든 동작하는 보편적인 키입니다. 이 글에서는 Neovim에서만 쓸 수 있는 기능들을 다룹니다.

Neovim이 Vim 위에 추가하는 것:

Neovim에는 플러그인 없이 코드 분석, 정의 이동, 자동완성을 지원하는 내장 LSP가 있습니다. 내장 터미널에서는 에디터 안에서 셸을 실행합니다. Lua 설정으로 Vimscript 대신 Lua를 사용해 설정과 플러그인을 구성하며, 플러그인 생태계에는 Telescope, Treesitter, LSP 기반 플러그인 등이 있습니다.

아래 단축키 중 <leader> 키가 나오면, 대부분의 Neovim 설정에서 Space로 매핑되어 있습니다.

내장 LSP 단축키

LSP(Language Server Protocol)를 설정하면 IDE 수준의 코드 내비게이션이 가능해집니다.

코드 내비게이션

동작
gd정의로 이동 (Go to Definition)
gD선언으로 이동 (Go to Declaration)
gr참조 목록 (Go to References)
gi구현으로 이동 (Go to Implementation)
K커서 아래 심볼 정보 표시 (hover)
Ctrl-]정의로 이동 (태그 스택 방식)

gd로 이동한 후 Ctrl-o를 누르면 이전 위치로 돌아옵니다.

코드 액션

동작
<leader>ca코드 액션 (자동 수정, import 추가 등)
<leader>rn심볼 이름 변경 (rename)
<leader>f포맷팅

진단 (Diagnostics)

동작
[d이전 진단(에러/경고)으로 이동
]d다음 진단으로 이동
<leader>e현재 줄 진단 메시지 표시
<leader>q진단 목록 열기 (quickfix)

자동완성

동작
Ctrl-Space자동완성 메뉴 열기
Tab / Shift-Tab다음 / 이전 항목
Enter선택 확정
Ctrl-e자동완성 취소
Ctrl-n / Ctrl-p다음 / 이전 (내장 완성)

시그니처 도움말

동작
Ctrl-k함수 시그니처 표시 (Insert 모드)

함수 호출 시 인자를 입력하는 중에 Ctrl-k를 누르면 파라미터 정보가 표시됩니다.

내장 터미널

Neovim 안에서 셸을 실행합니다.

기본 사용

명령동작
:terminal현재 윈도우에서 터미널 열기
:split | terminal가로 분할 후 터미널
:vsplit | terminal세로 분할 후 터미널

터미널 모드 키

동작
i / a터미널 입력 모드 진입
Ctrl-\ Ctrl-nNormal 모드로 복귀

터미널에서 Normal 모드로 돌아오면 출력 내용을 Vim 명령으로 검색하거나 복사할 수 있게 됩니다.

분할 터미널 워크플로우

+------------------+------------------+
| Code (Neovim) | Terminal (shell) |
| | |
+------------------+------------------+

코드를 편집하면서 옆 터미널에서 빌드/테스트를 실행합니다. Ctrl-w l로 터미널로 이동하고, Ctrl-w h로 코드로 복귀합니다.

플로팅 터미널: 많은 설정에서 Ctrl-; 또는 <leader>t로 플로팅 터미널을 토글합니다. 화면을 많이 가리지 않으면서 빠르게 명령을 실행하는 데 유용합니다.

마우스 활용

Neovim에서 mouse=a 설정을 켜면 마우스를 활용할 수 있게 됩니다.

기본 동작

동작결과
클릭커서 이동
드래그Visual 모드로 텍스트 선택
더블클릭단어 선택 (Visual)
트리플클릭줄 전체 선택 (Visual Line)
Shift + 클릭현재 커서부터 클릭 위치까지 선택
스크롤 휠페이지 스크롤

마우스 + 키보드 하이브리드

마우스로 선택한 후 키보드로 조작:

1. 마우스 드래그로 영역 선택 (Visual 모드 진입)
2. d, c, y 등 키보드 명령 실행

예: 마우스로 코드 블록을 드래그 선택 → > (들여쓰기), y (복사), d (삭제)

언제 마우스를 쓰는가

키보드가 더 빠른 경우는 다음과 같습니다.

  • 같은 줄 내 이동 (f, w, 0, $)
  • 구조적 선택 (ci", vi{, vap)
  • 반복 작업 (., 매크로)

마우스는 화면에 보이는 임의의 위치로 먼 거리 점프를 하거나, 여기저기 클릭하며 코드 리뷰를 하거나, 단어나 괄호 경계와 무관하게 비구조적 선택을 할 때 더 빠릅니다.

키보드 순수주의에 집착할 필요는 없습니다. 상황에 따라 둘 다 사용하면 됩니다.

필수 플러그인 단축키

Neovim 생태계의 핵심 플러그인들과 주요 단축키를 정리합니다.

Telescope

퍼지 파인더로 파일과 텍스트, 버퍼, 도움말 태그를 검색합니다.

동작
<leader>ff파일 찾기
<leader>fg텍스트 검색 (live grep)
<leader>fb열린 버퍼 목록
<leader>fh도움말 태그 검색

Telescope 창 안에서:

동작
Ctrl-j / Ctrl-k위아래 이동
Enter선택 항목 열기
Ctrl-x가로 분할로 열기
Ctrl-v세로 분할로 열기
Ctrl-t새 탭으로 열기
Esc닫기

Neo-tree

파일 트리를 제공하는 탐색기입니다.

동작
<leader>e파일 트리 토글

Neo-tree 안에서:

동작
Enter / o파일 열기 / 폴더 토글
a새 파일/폴더 생성
d삭제
r이름 변경
c / m복사 / 이동
y경로 복사
/필터 검색

Comment.nvim

언어에 맞는 주석을 간편하게 적용합니다.

동작
gcc현재 줄 주석 토글
gc{motion}범위 주석 토글 (예: gcap 문단)
gc (Visual)선택 영역 주석 토글
gbc현재 줄 블록 주석 토글

Vim의 Ctrl-vI// 방식보다 훨씬 간편합니다. 언어별 주석 형식도 자동 감지합니다.

nvim-surround

텍스트를 원하는 문자로 감싸거나 기존 감싸기를 변경하고 삭제합니다.

동작예시
ys{motion}{char}감싸기 추가ysiw" → word를 "word"로
cs{old}{new}감싸기 변경cs"' → "text"를 'text'로
ds{char}감싸기 삭제ds" → "text"를 text로
S{char} (Visual)선택 영역 감싸기선택 후 S( → (선택 영역)으로

Surround 문법:

ys + iw + " → 단어를 "로 감싸기
ys + ap + { → 문단을 {로 감싸기
cs + " + ' → "를 '로 변경
ds + ( → (를 삭제

이것도 동사(ys/cs/ds) + 명사(motion/text object) + 감싸기 문자의 문법입니다.

Flash / Hop

현재 화면 안에서 원하는 위치로 빠르게 이동합니다.

동작
s{char}{char}2글자 입력 후 레이블로 점프

화면에 보이는 위치로 2-3번의 키 입력만으로 이동합니다. f/t는 같은 줄로 제한되지만, Flash는 화면 전체에서 동작합니다.

Gitsigns

Git 변경 사항을 표시하고 hunk 단위 작업을 지원합니다.

동작
]c / [c다음 / 이전 변경 사항으로 이동
<leader>hshunk 스테이지
<leader>hrhunk 리셋
<leader>hphunk 미리보기 (diff)
<leader>hb줄 blame 표시

Which-key

사용할 수 있는 키를 팝업으로 안내합니다.

동작설명
<leader> 누르고 잠시 대기사용 가능한 키 목록이 표시됨

단축키가 기억나지 않을 때 <leader>만 누르고 기다리면 됩니다. 어떤 키가 어떤 기능인지 팝업으로 보여줍니다.

Leader 키와 커스텀 매핑 전략

Space를 Leader로 쓰는 이유

vim.g.mapleader = " "
  • 양손 어디서든 누르기 쉬운 위치
  • 기본적으로 Normal 모드에서 Spacel과 같은 동작(쓸모 없음)
  • Neovim 커뮤니티의 사실상 표준

네이밍 규칙

잘 만들어진 설정에서는 Leader 뒤의 키가 일관된 체계를 따릅니다.

접두사의미예시
<leader>fFindff(파일), fg(grep), fb(버퍼)
<leader>bBufferbn(다음), bp(이전), bd(닫기)
<leader>gGitgs(status), gc(commit), gp(push)
<leader>lLSPld(정의), lr(참조), ln(rename)
<leader>tTerminal/Tabtt(토글), tn(새 탭)
<leader>wWindowwv(세로분할), ws(가로분할)

자주 쓰는 커스텀 매핑

-- 저장
vim.keymap.set("n", "<leader>w", ":w<CR>")

-- 창 이동 (Ctrl-h/j/k/l)
vim.keymap.set("n", "<C-h>", "<C-w>h")
vim.keymap.set("n", "<C-j>", "<C-w>j")
vim.keymap.set("n", "<C-k>", "<C-w>k")
vim.keymap.set("n", "<C-l>", "<C-w>l")

-- Visual 모드에서 들여쓰기 후 선택 유지
vim.keymap.set("v", "<", "<gv")
vim.keymap.set("v", ">", ">gv")

-- 줄 이동
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")

-- 검색 하이라이트 제거
vim.keymap.set("n", "<leader>h", ":nohlsearch<CR>")

-- 시스템 클립보드 복사
vim.keymap.set({"n", "v"}, "<leader>y", '"+y')

마지막 <gv / >gv 매핑은 특히 유용합니다. 기본 Vim에서는 >로 들여쓰기하면 Visual 선택이 해제되지만, 이 매핑을 쓰면 선택이 유지되어 연속으로 > >를 누를 수 있습니다.

클립보드 연동

기본 사용

"+y → 시스템 클립보드에 복사
"+p → 시스템 클립보드에서 붙여넣기

매번 "+를 치기 귀찮다면 설정에서:

vim.opt.clipboard = "unnamedplus"

이렇게 하면 y/p가 바로 시스템 클립보드를 사용합니다.

SSH 원격에서 클립보드

SSH로 접속한 서버의 Neovim에서 복사한 텍스트를 로컬 클립보드로 보내려면 OSC 52를 지원하는 터미널이 필요합니다.

지원 터미널: iTerm2, WezTerm, Alacritty, kitty, Windows Terminal

Neovim 0.10+에서는 OSC 52가 기본 지원됩니다. 별도 설정 없이 "+y로 SSH 환경에서도 로컬 클립보드에 복사합니다.

Neovim 전용 편의 기능

명령/검색 히스토리 윈도우

동작
q:명령 히스토리를 편집 가능한 창으로
q/검색 히스토리를 편집 가능한 창으로

일반 : 프롬프트와 달리, Vim 명령(검색, 편집, 이동)으로 이전 명령을 수정해 실행합니다. 긴 치환 명령을 재사용할 때 유용합니다.

q:를 실수로 눌렀다면 :q로 닫습니다.

inccommand

치환 결과를 실시간으로 미리 보여주는 기능입니다.

vim.opt.inccommand = "split"

:s/old/new/g를 입력하는 동안 실시간으로 변경 결과를 미리 보여줍니다. 정규식이 맞는지 실행 전에 확인할 수 있습니다.

"split"으로 설정하면 화면 하단에 변경될 줄 목록이 표시됩니다. "nosplit"이면 본문에서 직접 하이라이트합니다.

:lua 직접 실행

:lua print(vim.fn.expand("%")) " 현재 파일 경로
:lua print(vim.opt.tabstop:get()) " 탭 크기
:lua vim.lsp.buf.format() " LSP 포맷팅

설정을 바꾸거나 디버깅할 때 Lua 코드를 즉시 실행할 수 있다는 점도 유용합니다.

내장 diff 모드

nvim -d file1.txt file2.txt

또는 이미 열린 상태에서:

:diffthis " 현재 윈도우를 diff에 포함
:diffoff " diff 모드 해제
]c / [c " 다음/이전 변경으로 이동
do " diff obtain — 반대쪽 변경 가져오기
dp " diff put — 이쪽 변경 보내기

단축키 디버깅

단축키가 안 먹히거나 예상과 다르게 동작할 때:

매핑 확인

:map <leader>f " <leader>f에 뭐가 매핑되어 있는지
:nmap " Normal 모드 매핑 전체 목록
:imap " Insert 모드 매핑 전체
:vmap " Visual 모드 매핑 전체
:verbose map <leader>f " 어떤 파일에서 매핑했는지까지 표시

:verbose가 특히 중요합니다. 키 충돌이 생겼을 때 어떤 플러그인이 해당 키를 가져갔는지 바로 확인합니다.

Which-key 활용

Which-key 플러그인이 설치되어 있다면 <leader>를 누르고 기다리면 모든 매핑이 시각화됩니다. 키 충돌이 있으면 같은 접두사에 두 개 이상의 매핑이 보입니다.

키가 안 먹힐 때 체크리스트

  1. :verbose map <key>로 다른 플러그인이 덮어쓰지 않았는지 확인
  2. 올바른 모드인지 확인 (nmap vs imap vs vmap)
  3. Leader 키가 제대로 설정되었는지: :echo mapleader
  4. 플러그인이 로드되었는지: :Lazy check (lazy.nvim 사용 시)

마치며

Neovim은 Vim의 편집 철학 위에 현대적인 기능을 더해요. LSP는 IDE 수준의 코드 내비게이션을 제공하고, 내장 터미널은 에디터 밖을 나가지 않는 워크플로우를 만들며, 플러그인은 기능을 폭넓게 확장해요.

다음 순서로 익히기를 권합니다.

  1. 1편의 Vim 기본을 먼저 익힙니다
  2. LSP 단축키(gd, K, gr)를 자주 쓰면서 습관을 만듭니다
  3. Telescope(<leader>ff/fg)를 파일 탐색의 기본으로 삼습니다
  4. Comment(gcc), Surround(ys/cs/ds)를 익힙니다
  5. 나머지는 필요할 때 하나씩 추가합니다

한 번에 다 외우려 하지 말고, 매일 하나씩 새로운 키를 시도해보세요.

참고 자료

Vi/Vim 단축키 가이드

· 약 15분

이 글은 Vim 단축키 시리즈의 첫 번째 글이에요.

  1. Vi/Vim 단축키 종합 가이드: 기본부터 실전까지 ← 현재 글
  2. 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은 모드 기반 에디터입니다. 같은 키도 모드에 따라 다르게 동작합니다.

모드진입역할
NormalEsc이동, 편집 명령 실행
Inserti, a, o텍스트 입력
Visualv, V, Ctrl-v영역 선택
Command-line:, /, ?명령 실행, 검색
ReplaceR덮어쓰기 입력

Insert 모드 내 단축키

Insert 모드에서도 몇 가지 유용한 키가 있습니다.

동작
Ctrl-w커서 앞 단어 삭제
Ctrl-u커서 앞 줄 전체 삭제
Ctrl-r "레지스터 내용 붙여넣기
Ctrl-oNormal 모드 명령 1회 실행 후 Insert 복귀
Ctrl-t들여쓰기
Ctrl-d내어쓰기

기본 이동

k

h ← → l

j

숫자를 앞에 붙이면 반복합니다. 5j는 5줄 아래, 10k는 10줄 위로 이동합니다.

단어 단위 이동

동작
w다음 단어 시작
b이전 단어 시작
e현재/다음 단어 끝
ge이전 단어 끝
W/B/EWORD 단위 (공백 기준으로만 구분)

wW의 차이: 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}Gn번째 줄로 (: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 유지)
RReplace 모드 진입 (타이핑이 기존 텍스트를 덮어씀)

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)대상
단어iwawword
WORDiWaWWORD (공백 구분)
문장isassentence
문단ipapparagraph
"i"a""큰따옴표"
'i'a''작은따옴표'
`i`a``백틱`
( / )i(a((소괄호)
{ / }i{a{{중괄호}
[ / ]i[a[[대괄호]
< / >i<a<<꺾쇠>
태그itatHTML 태그

실전 조합:

ciw → 단어 내용 변경
da" → 따옴표 포함 삭제
vi( → 괄호 안 Visual 선택
yat → HTML 태그 전체 복사
>ip → 현재 문단 들여쓰기
gUiw → 단어 대문자로

Visual 모드 기본

세 가지 Visual 모드

모드선택 단위
vVisual문자 단위
VVisual Line줄 단위
Ctrl-vVisual Block사각형 블록

선택 확장

동작
o선택 영역의 양 끝을 토글 (시작↔끝 커서 이동)
OVisual Block에서 같은 줄의 반대쪽 모서리로

o는 선택을 시작한 후 반대 방향으로도 확장하고 싶을 때 씁니다.

모드 전환

선택을 유지한 채 모드를 바꿀 수 있습니다. vV로 문자에서 줄로, VCtrl-v로 줄에서 블록으로 바꿀 수 있습니다.

재선택

동작
gv마지막 Visual 선택 영역을 다시 선택

>로 들여쓰기 후 gv로 재선택하면 한 번 더 들여쓸 수 있습니다. gv>gv> 순서입니다.

선택 + 모션

조합결과
v2w2단어 선택
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-vjjllld.

예: 주석 일괄 제거

실행 전: 실행 후:
// let a = 1 let a = 1
// let b = 2 let b = 2
// let c = 3 let c = 3

// 위에 Ctrl-vjjlld.

컬럼 치환

선택한 사각형 영역을 새로운 텍스트로 교체합니다.

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. > → 한 레벨 더

또는 Vjjj3>로 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-vjjj (0들을 선택) → g Ctrl-a.

실전 예제 모음

상황방법
여러 줄 앞에 // 주석Ctrl-vjjjI// Esc
여러 줄 // 주석 제거Ctrl-vjjjlld
여러 줄 끝에 ; 추가Ctrl-vjjj$A;Esc
CSV 특정 컬럼 삭제해당 열에 Ctrl-vGd
변수명 일괄 교체해당 열에 Ctrl-vjjjec → 새 이름 → Esc
여러 줄 들여쓰기Ctrl-vjjj> (또는 Vjjj>)
0부터 순차 번호0을 입력 → 복사해서 여러 줄 → Ctrl-v로 선택 → g Ctrl-a
HTML 속성 일괄 추가태그 뒤에 Ctrl-vjjjA 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,20d5~20줄 삭제
:5,20y5~20줄 복사
:10,20m3010~20줄을 30줄 뒤로 이동
:10,20co3010~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 결과
"0yank마지막 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}gtn번 탭으로 이동

접기 (Folding)

코드의 일부를 접어서 숨길 수 있습니다.

동작
zf{motion}접기 생성 (예: zfap 문단 접기)
za접기 토글
zo접기 열기
zc접기 닫기
zR전체 열기
zM전체 닫기
zj다음 접기로 이동
zk이전 접기로 이동

실전 편집 레시피

"이걸 하고 싶은데 어떻게 하지?"라는 상황에 맞춘 단축키 조합입니다.

하고 싶은 것방법
이 단어를 전부 바꾸고 싶다*ciw → 새 단어 → Esc → n. 반복
여러 줄 앞에 주석 추가Ctrl-vjjjI// → Esc
여러 줄 주석 제거Ctrl-vjjjlld
괄호 안 내용만 교체ci(
따옴표 안 내용 복사yi"
태그 안 내용 삭제dit
현재 줄 복제yyp
두 줄 순서 바꾸기ddp
여러 줄 들여쓰기Vjjj> (반복: .)
여러 줄 내어쓰기Vjjj<
선택 영역 정렬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 어디서든 쓸 수 있어요.

기억할 것은 세 가지예요.

  1. 문법 이해 — 동사 + 명사 조합으로 암기량 줄이기
  2. . 습관화 — 반복 가능한 편집으로 생산성 높이기
  3. Visual Block 익히기 — 멀티 커서 없이 다중 행 편집하기

다음 글에서는 LSP, 터미널, 플러그인, 마우스 활용까지 Neovim만의 단축키를 다뤄요.