갤 살리기 운동 일환으로 뭐라도 연재 시작해봄
순정 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랑 섞으면 이런걸 만들 수 있음:
이름 그대로 Neovim에서 snippet을 정의하는 함수임.
trigger를 입력하여 약어가 활성화 됐을 때, trigger 이후에 문자가 왔으면 `nvim_feedkeys`로 입력됐던 문자열을 그대로 다시 한번 입력하고,
문자가 안왔으면 (CTRL-]를 이용해 약어를 활성화했을 시) `vim.snippet.expand`로 LSP spec 기반의 스니펫을 펼침
(expr 옵션을 안쓴 이유는 그게 켜져 있으면 `vim.snippet.expand`가 동작 안해서)
사용 예:
after/ftplugin/lua.lua 파일에 이렇게 넣어두면
lua filetype에 대해서만 fn로 지정해뒀던 스니펫을 사용할 수 있음
- dc official App
vim추
1. 내 생각에는 내장 스니펫이라는게 뭔지부터 먼저 설명하면 좋을 것 같음 2. 예로 들면 내장 스니펫 기능 소개 => 약어를 이용한 스니펫 구현 아이디어 제시 => 약어 기능 소개 => 약어를 이용한 스니펫 구현 => 실 사용 예시 => ... 3. 이미 배포되어 널리 쓰이는 스니펫 플러그인은 없음? 4. 팁 공유 감사
5. expr 및 buffer 설명 시 얘네들이 "약어 명령"에서 지원된다고 명시하면 이해가 더 쉬울 것 같음 6. 이러한 정의를 어디에서(vim의 경우, Neovim의 경우) 수행할 수 있는지 추가 설명하면 더 좋을 것 같음 7. 목적을 먼저 말하고 설명을 뒤에 붙이면 더 좋을 것 같음 (e.g. 특정 파일유형에 대해서만 스니펫을 지정하고 싶으면 ...)
1. 매번 느끼는건데 스니펫을 항상 쓰면서 이게 뭐라 부르는건지 모르는 사람들이 많네, 딴거 준비하면서 후다닥 쓴 글이라 거기까진 생각을 못했음. 나중에 다시 정리해서 올릴게 3. Luasnip, nvim-snippets 등 몇가지 있는데, 간단히 쓸거면 nvim-snippets. 극한을 보고 싶다면 Luasnip. - dc App
Neovim 설정을 다 해봤고, 대강 다 안다는 전제하에 적느라 글이 좀 막나간것 같다. 차라리 밑바닥부터 시작하는 튜토리얼식이었으면 이런 문제는 없었을텐데 당장 내년까진 적을 시간이 안날듯 - dc App
난 vim에 별로 관심이 없긴 한데 되게 잘알고있네 멋지다
오 빔 팁 연재 계속해주세용