C.W.K.
Stream
Lesson 02 of 04 · published

키 매핑 — 키보드를 내 거로

~13 min · vim, keymaps, leader

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

Leader 키

Leader 는 단축키의 개인 namespace. 키 하나 골라 (스페이스가 가장 인기 — 크고, ergonomic 하고, Normal mode 에서 중요한 거 안 써) 그 위에 자기 명령 vocabulary 쌓아: 저장에 <leader>w, 파일 찾기에 <leader>ff, git status 에 <leader>gs. 추가하는 매 매핑이 손에게 가르친 문장이야.

Map 패밀리

Vim 에 모드별 매핑 시스템 있어. nmap 이 Normal 에서; imap 이 Insert; vmap 이 Visual; cmap 이 Command-line. 항상 noremap 변형 선호 (nnoremap, inoremap 등) — 오른쪽을 리터럴로 처리해서 다른 매핑 통해 재귀 확장 안 해. 그게 무한 루프 피하는 방법.

Lua 의 더 깔끔한 동등

Neovim Lua 에서 vim.keymap.set(mode, lhs, rhs, opts) 가 map 패밀리 전체 대체. opts 는 table 인데 desc (which-key plugin 들이 표시), silent = true, noremap = true (vim.keymap.set 기본), buffer-local 매핑 위한 buffer = N 박을 수 있어.

모든 config 가 갖는 매핑

거의 모든 config 에 나타나는 작은 정전 매핑 — 진짜 짜증을 고치니까: Esc 에 검색 하이라이트 클리어, Insert 에서 escape 에 jk, leader-w 저장, leader-q 종료, split navigation 에 Ctrl-h/j/k/l (Ctrl-w prefix 오버라이드), n / Nzz 로 가운데, Visual mode 에서 라인 이동에 J / K.

매핑은 proactive 가 아니라 reactive 로 추가. 남의 dotfile 에서 200 줄 keymap 파일 복사하지 마. 하루에 같은 시퀀스 두 번 친 자신 발견할 때, 그때 매핑. 최고 keymap 은 체크 안 하고 기억나는 거고, 그건 실제로 느낀 필요에서 나온 거야.

Code

Leader 박고 정통 Insert escape·vim
" Vimscript
let mapleader = " "

inoremap jk <Esc>
inoremap jj <Esc>
Lua 동등·lua
vim.g.mapleader = " "
vim.g.maplocalleader = " "

vim.keymap.set("i", "jk", "<Esc>")
vim.keymap.set("i", "jj", "<Esc>")
Starter keymap 팩 — Vimscript·vim
" 저장 / 종료 / config 편집
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>x :x<CR>

" 검색 하이라이트 클리어
nnoremap <Esc> :nohlsearch<CR>

" Window navigation
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" 검색 / 스크롤 후 가운데
nnoremap n nzzzv
nnoremap N Nzzzv
nnoremap <C-d> <C-d>zz
nnoremap <C-u> <C-u>zz

" Visual 선택 위/아래 이동
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv

" Join 시 커서 유지
nnoremap J mzJ`z

" leader 로 시스템 클립보드 yank/paste
nnoremap <leader>y "+y
vnoremap <leader>y "+y
nnoremap <leader>p "+p

" 블랙홀 삭제
nnoremap <leader>d "_d
vnoremap <leader>d "_d
Starter keymap 팩 — Lua·lua
local map = vim.keymap.set

-- 저장 / 종료
map("n", "<leader>w", "<cmd>w<CR>", { desc = "Save file" })
map("n", "<leader>q", "<cmd>q<CR>", { desc = "Quit" })
map("n", "<leader>x", "<cmd>x<CR>", { desc = "Save and quit" })

-- 검색 하이라이트 클리어
map("n", "<Esc>", "<cmd>nohlsearch<CR>", { desc = "Clear search" })

-- Window navigation
map("n", "<C-h>", "<C-w>h", { desc = "Move to left split" })
map("n", "<C-j>", "<C-w>j", { desc = "Move to lower split" })
map("n", "<C-k>", "<C-w>k", { desc = "Move to upper split" })
map("n", "<C-l>", "<C-w>l", { desc = "Move to right split" })

-- 검색 / 스크롤 후 가운데
map("n", "n", "nzzzv")
map("n", "N", "Nzzzv")
map("n", "<C-d>", "<C-d>zz")
map("n", "<C-u>", "<C-u>zz")

-- Visual 선택 위/아래 이동
map("v", "J", ":m '>+1<CR>gv=gv")
map("v", "K", ":m '<-2<CR>gv=gv")

-- 블랙홀 삭제 (yank 보존)
map({ "n", "v" }, "<leader>d", "\"_d", { desc = "Delete without yanking" })

External links

Exercise

Config 에 starter keymap 팩 추가. Neovim 재로드. 각자 테스트: <Space>w 저장, Insert mode 의 jk escape, Ctrl-h/j/k/l 가 split 사이 이동 (먼저 :vs 로 split 하나 열어). 그 다음 개 개인 매핑 추가 — 항상 하는 거 — 예를 들어 nnoremap <leader>sv :source $MYVIMRC<CR> 로 config 재로드. 매 매핑 벌어; 대량 import 하지 마.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.