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 ignorecase랑 set smartcase를 같이 켜면 이렇게 돼. 소문자로 검색하면 대소문자를 안 가려 (/foo가 Foo, FOO, foo를 다 잡아). 대문자를 섞어 검색하면 그때만 대소문자를 가리고 (/Foo는 Foo만 잡아). 거의 항상 이게 원하는 동작이야. 여기에 incsearch (치는 동안 미리 보여주기) 랑 hlsearch (걸린 것 전부 표시) 를 더해.
삶의 질 묶음
scrolloff=8은 커서 위아래로 여덟 줄을 항상 남겨둬서 커서가 화면 맨 끝에 붙지 않게 해. signcolumn=yes는 git이나 LSP 표시가 들어올 자리를 미리 비워둬서 표시가 뜰 때마다 글이 옆으로 밀리지 않게 하고. termguicolors는 true-color를 켜. updatetime=250은 많은 plugin이 쓰는 CursorHold 이벤트를 즉각적으로 만들어주고. undofile은 세션이 끝나도 undo 기록을 남겨줘.
.vimrc를 그대로 복사해 오는 거야. 여섯 달 뒤에 뭔가 깨지는데 왜인지 모르고, 그러다 Vim을 접게 돼. 작게 시작해. 없어서 아쉬웠던 설정만 그때그때 더하고. 아래 스물다섯 줄짜리 config가 첫날부터 일하는 데 실제로 필요한 전부야.