갤 살리기 운동 일환으로 뭐라도 연재 시작해봄
순정 vim부터 (9.0 기준) neovim까지 (nightly 기준) 자잘한 팁같은거 조금씩 뿌릴 생각임

h,j,k,l 같은 vim motion이나 기본적인 config 작성법은 안다는 전제 하에 적을거임
강좌가 아니라 어디까지나 팁. 검색하면 수두룩하게 나오는 누구나 다 아는 정보는 피해서,
최대한 듣보잡 정보인데 알아두면 쓸만한것들만 모아보려 하고 있음
내장 help 문서가 이미 잘 작성되어 있는 vim 특성상 글이 좀 짧은건 양해바람

잘못된 정보에 대한 피드백은 언제나 환영

———

Vim/Neovim의 순정 자동완성 기능

요즘은 vim, neovim 모두 자동완성은 coc.nvim이나 nvim-cmp 같은 플러그인을 사용하는게 일반적이지만
순정 vim도 꽤 많은 자동완성 기능을 지원하고 있음
물론 인텔리센스 같은건 없는 그냥 텍스트 에디터이기에 대부분 다 그냥 텍스트 기반 매칭이고, fuzzy 매칭도 안됨
(fuzzy 매칭의 경우 vim은 9.1부터 지원하기 시작했고, neovim도 2주 전에 관련 draft PR이 올라옴)
그래도 없는것보단 낫고, neovim은 진짜로 플러그인 없이 VSCode 수준의 자동완성이 가능함

오늘은 플러그인 없이 내장 자동완성 기능을 사용하는 방법을 알아보자

:h ins-completion

보통 insert mode에서 CTRL-X_CTRL-(키) 조합으로 쓸 수 있고,
여러가지 중 내가 자주쓰는건 아래 셋:

i_CTRL-X_CTRL-F : 파일 경로 자동완성 (현재 파일 기준이 아니라 vim 실행 위치 기준. 현재 파일 기준으로 하고 싶다면 참고: https://superuser.com/a/604180 )
i_CTRL-X_CTRL-N : 현재 파일의 단어 기반 자동완성
i_CTRL-X_CTRL-O : omnifunc라는 자동완성 함수를 통한 자동완성

pmenu라 불리는 자동완성 팝업이 떴을 때,
CTRL-N : 다음
CTRL-P : 이전
CTRL-Y : 확인
CTRL-E : 취소

omnifunc이란

:h ‘omnifunc’

3번째의 omnifunc에 대해 설명하자면, 흔히 생각하는 언어 인텔리센스 기반 자옹완성이 이친구를 통해 이뤄짐
‘omnifunc’라는 옵션을 통해 자동완성 함수를 연결할 수 있음

순정 vim의 경우 C, Java, HTML, , Ruby 등의 언어에 대한 자동완성을 지원하고 있고,
syntax highlighting 기반으로 자동완성하는 옵션을 켜면 500가지가 넘는 언어에 대한 (최소한의) 자동완성 기능이 내장되어 있는 셈임
물론 일반적인 IDE에 비하면 한참 부족하지만 없는것보단 낫고, 단순하게 만들어진거지 못만들어진건 아니라 쓸만한 정도는 됨
이 내장 omni-function은 `:filetype plugin on` 명령어로 켤 수 있음

7d9f827eb7841c8523ec8693349c701fe11091351dc08ad1930e2cc97e75097eb62596b1632a25d3f006cc0268f50ec79c9f7fb0

순정 vim에서 omni-function 기반 자동완성을 사용하면 이런 느낌
9.1에 completeopt+=fuzzy 기능 추가되면 진짜 쓸만할듯


neovim의 추가 내장 omni-function들

neovim은 몇가지 더 유용한 omni-function을 지원하고 있음


첫번째는 이름에서 알 수 있듯이 LSP에서 제공하는 자동완성 목록을 이용할 수 있게 해주고,
두번째는 내장 Lua 자동완성 기능임
즉, Neovim에서 LSP 자동완성을 하는데 nvim-cmp 같은 플러그인은 사실 없어도 된다.

nvim-cmp가 어떤 용도인지는 다른 글에서 다뤄봄

`:set omnifunc = v:lua.vim.lsp.omnifunc` 와 같은 형태로 지정할 수 있음
lua로 하면 `vim.bo.omnifunc = “v:lua.vim.lsp.omnifunc”`
이건 0.11부터 LspAttach 이벤트에 기본 옵션으로 추가될 예정

———

2일차인데 벌써 소재가 고갈되기 시작했다
’많은 vim 유저들이 모를 것 같으면서 알아두면 유용한 기능‘이 막상 생각해보려니 생각보다 많지 않아서 아껴뒀던 소재를 벌써 써버렸네
나중엔 snippet 위주의 글이 될지도

이정도 주제가 너무 깊은지, 아니면 너무 유명한건지, 잘 이해가 안되는지 피드백 주면 반영해봄

- dc official App