본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

필수 설정 — Vimscript와 Lua

~14 min · vim, config, vimscript, lua

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

Config가 사는 곳

고전 Vim은 시작할 때 ~/.vimrc를 읽어. Neovim은 Vimscript로 쓸 거면 ~/.config/nvim/init.vim을, Lua로 쓸 거면 ~/.config/nvim/init.lua를 읽고. Neovim이라면 Lua를 권해. Lua는 진짜 프로그래밍 언어인 데다, 요즘 Neovim 생태계가 전부 그걸로 쓰여 있거든.

Vim을 "이상한 에디터"에서 "내 에디터"로 바꾸는 설정

스물다섯 줄쯤 되는 config면 편하고 현대적인 Vim을 가질 수 있어. 이 레슨의 나머지는 그 필수 설정 하나하나가 뭘 하고 왜 켜고 싶은지를 훑는 거야.

줄 번호 — 비밀은 relative에 있어

set number는 지금 줄의 절대 번호를 보여줘. set relativenumber는 나머지 줄이 커서에서 얼마나 떨어졌는지를 보여주고. 둘을 같이 켜면 커서가 있는 줄만 절대 번호가 뜨고 나머지는 거기까지 가는 데 필요한 count가 떠. "7"이라고 적힌 줄까지 지우고 싶어? 7dd야. 머리로 셀 일이 없어.

Tab이냐 space냐 — 영원한 논쟁, 파일 종류별로 해결

대부분의 언어에는 이 조합을 쓰면 돼. set expandtab (Tab 키가 공백을 만들어), set tabstop=4 (탭 문자를 공백 네 칸 너비로 보여줘), set shiftwidth=4 (>>가 네 칸씩 들여써), set softtabstop=4 (Insert mode의 Tab이 네 칸처럼 움직여). Go나 Makefile처럼 진짜 탭 문자를 요구하는 언어도 있는데, 그건 autocommand로 파일 종류별로 갈라주면 돼.

나랑 안 싸우는 검색

set ignorecaseset smartcase를 같이 켜면 이렇게 돼. 소문자로 검색하면 대소문자를 안 가려 (/foo가 Foo, FOO, foo를 다 잡아). 대문자를 섞어 검색하면 그때만 대소문자를 가리고 (/Foo는 Foo만 잡아). 거의 항상 이게 원하는 동작이야. 여기에 incsearch (치는 동안 미리 보여주기) 랑 hlsearch (걸린 것 전부 표시) 를 더해.

삶의 질 묶음

scrolloff=8은 커서 위아래로 여덟 줄을 항상 남겨둬서 커서가 화면 맨 끝에 붙지 않게 해. signcolumn=yes는 git이나 LSP 표시가 들어올 자리를 미리 비워둬서 표시가 뜰 때마다 글이 옆으로 밀리지 않게 하고. termguicolors는 true-color를 켜. updatetime=250은 많은 plugin이 쓰는 CursorHold 이벤트를 즉각적으로 만들어주고. undofile은 세션이 끝나도 undo 기록을 남겨줘.

config의 모든 줄을 이해해. Vim에서 제일 크게 빠지는 함정이 인터넷에서 2000줄짜리 .vimrc를 그대로 복사해 오는 거야. 여섯 달 뒤에 뭔가 깨지는데 왜인지 모르고, 그러다 Vim을 접게 돼. 작게 시작해. 없어서 아쉬웠던 설정만 그때그때 더하고. 아래 스물다섯 줄짜리 config가 첫날부터 일하는 데 실제로 필요한 전부야.

Code

필수 설정 — Vimscript (~/.vimrc)·vim
" 디스플레이
set number
set relativenumber
set cursorline
set signcolumn=yes
set scrolloff=8
set sidescrolloff=8
set termguicolors
set wrap
set breakindent

" 들여쓰기
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smartindent

" 검색
set ignorecase
set smartcase
set incsearch
set hlsearch

" 편집 삶의 질
set hidden
set mouse=a
set clipboard=unnamedplus
set splitright
set splitbelow
set undofile
set updatetime=250
set timeoutlen=300
set backspace=indent,eol,start
같은 설정 — Lua (~/.config/nvim/init.lua)·lua
-- 디스플레이
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
vim.opt.signcolumn = "yes"
vim.opt.scrolloff = 8
vim.opt.sidescrolloff = 8
vim.opt.termguicolors = true
vim.opt.wrap = true
vim.opt.breakindent = true

-- 들여쓰기
vim.opt.expandtab = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.opt.autoindent = true
vim.opt.smartindent = true

-- 검색
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.incsearch = true
vim.opt.hlsearch = true

-- 편집 삶의 질
vim.opt.hidden = true   -- Neovim 기본, 명시 위해 넣음
vim.opt.mouse = "a"
vim.opt.clipboard = "unnamedplus"
vim.opt.splitright = true
vim.opt.splitbelow = true
vim.opt.undofile = true
vim.opt.updatetime = 250
vim.opt.timeoutlen = 300

External links

Exercise

~/.config/nvim/init.lua를 만들거나 열어서 위의 Lua 필수 설정 덩어리를 붙여넣어. Neovim을 다시 켜고 설정이 하나씩 먹는지 확인해봐. gutter의 상대 줄 번호, / 뒤에 뜨는 hlsearch 표시, /foo/Foo에서 smartcase가 제대로 갈라지는지, 껐다 켜도 살아남는 undo 기록까지. 아직 다른 건 더하지 마 — 기본선이 어떤 느낌인지부터 느껴.

Progress

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

댓글 0

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

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