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

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

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

———

오늘은 좀 개쩌는걸로 갖고왔다.

:h abbreviation

:map 말고 :ab[breviate] 라는 커맨드가 존재함.
제목 그대로 약어를 생성하는 커맨드임.

:iab ms Microsoft
이런식으로 해놨으면
Insert Mode에서 ms 입력후 space, tab, enter 혹은 특수문자 입력시, 자동으로 Microsoft로 바뀜
CTRL-] 단축키로도 약어를 완성할 수 있다.

나는 보통
:cab git Neogit
이런식으로 해두고 :Neogit 대신 :git 으로 빠르게 입력하는 용도로 쓰고 있음
(물론 `:e .git`도 `:e .Neogit`으로 바뀌니까 그부분 처리한다고 실제 코드는 좀 더 길다)

:map과 거의 대부분의 옵션을 공유하고 있어서
:inoreab 형태로 `nore`를 붙여서 재귀실행이 안되게 할 수도 있고,
lhr 대신 lhr를 생성하는 expression을 정의할 수 있는 expr 옵션이나
현재 버퍼에만 설정하는 buffer 옵션 등도 전부 지원함

lua API 역시 `vim.keymap` API를 그대로 써서 정의할 수 있음.


vim.keymap.set(“ia”, “nvimisfun”, “Neovim is fun!”)

이러면 Insert Mode에서 nvimisfun이라는 약어가 생성됨


옛날 개발자들은 이 약어 기능을 이용해서

inoreabbrev if if () {}

이런식으로 유사 snippet을 만들어 사용했다고 함.














…로 끝내면 그냥 아무도 안쓰는 약어 기능에 대한 설명이었으니까 이걸 응용해보자

help 페이지를 조금 읽어보면 약어 뒤에 입력된 문자를 지워버리는 vim 코드를 제공하고 있는데, 그걸 lua로 바꾸고 vim.snippet.expand랑 섞으면 이런걸 만들 수 있음:

759b8002b2f168f4239df490459c701cb54135fab95a6da500cd04f0e22b4e8675f5042998e031798e7c9832b1fd850084408ec7

이름 그대로 Neovim에서 snippet을 정의하는 함수임.

trigger를 입력하여 약어가 활성화 됐을 때, trigger 이후에 문자가 왔으면 `nvim_feedkeys`로 입력됐던 문자열을 그대로 다시 한번 입력하고,
문자가 안왔으면 (CTRL-]를 이용해 약어를 활성화했을 시) `vim.snippet.expand`로 LSP spec 기반의 스니펫을 펼침
(expr 옵션을 안쓴 이유는 그게 켜져 있으면 `vim.snippet.expand`가 동작 안해서)

사용 예:

7ee88971b5851e8723ecf0e0339c706d44bedbe185689939531f96a57e300a3340378d54954cda1610246fe11fa21b609d1381

after/ftplugin/lua.lua 파일에 이렇게 넣어두면
lua filetype에 대해서만 fn로 지정해뒀던 스니펫을 사용할 수 있음

- dc official App