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

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

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

———

저번에 누가 내장 omnifunc로 coc.nvim을 대체할 수 있냐고 물어봤길래 한번 집고 넘어감
유명 vim/neovim 플러그인들과 그게 정확히 왜 필요한건지 알아볼꺼임
다 다시 확인해가면서 적기엔 양이 너무 많아서 쪼개서 적어봄
스포일러: fuzzy file finder만 빼면 필요한건 다 내장되어 있음


이름은 Coquer of Completion 이지만 엄밀히 말해서 자동완성 플러그인은 아니다.
그거보다 훨씬 더 많은 일을 하고 있음
vscode 코어를 뜯어내서 vim/neovim에 연결하는 플러그인임
그래서 vscode 플러그인들이 coc 버전으로 존재하고, Language Server 설정도 json으로 함
TS로 작성되어 있고, nodejs에서 돌아감

하는 일은:
- LSP 연결
- 자동완성
- 언어 인텔리센스 (diagnostics)
- inlay-hint (코드 중간에 type hint나 parameter 이름 뜨는거)
- 포매팅
- 스니펫
기타 등등
- 포맷터/린터 연결
- 디버거 연결 (DAP는 지원 안한다고 아는데, 디버거 플러그인은 몇개 있네)
- coc 플러그인 매니저 (vscode처럼 Language Server를 그대로 사용하지 않고, 플러그인으로 감싸서 씀)

Neovim이 LSP를 공식 지원하기 한참 전에 나온 플러그인이고,
보다싶이 단순 LSP 지원 말고도 여러가지 많음. LSP만 지원하는 플러그인으론 vim-lsp 같은 애들이 있음

vim은 LSP를 지원하지 않으니 필요하고,
neovim은 없어도 웬만한 기능은 내장으로 대체 가능함

Neovim lua 생태계와 차이점

- 하나가 전부 다 하고 있음 (설치 및 설정이 간편함)
- 이미 존재하는 vscode용 js 플러그인에 대응하는 버전을 많이 갖고 있음

이정도가 coc.nvim을 쓸 이유일듯
동시에 단점이기도 한게, neovim 내장 LSP 기능을 쓰지 않다보니 다른 neovim 플러그인과 연동이 안될 수 있고,
nodejs위에서 돌아가니까 성능 이슈도 생김

어제 소개했던 omnifunc는 어디까지나 vim에 내장되어있는 패턴 기반 자동완성 기능임
애초에 coc.nvim을 설치할 수 있다면 neovim도 설치할 수 있을테고, 그러면 coc.nvim이 없어도 됨
꼭 vim을 사용해야 하는 경우는 대개 서버에 직접 접속해서 편집하는 경우고, 그럴때 외부 의존성 없이 사용 가능한 내장 omnifunc가 유용한거임

———

시험 하루 전이라 오늘은 여기까지
내일은 neovim에서 nvim-lspconfig 없이 language server 실행하는 방법을 알아보자
coc.nvim의 기능을 플러그인으로, 그리고 플러그인 없이 구현하는 방법을 살펴볼거임

질문이나 피드백은 언제나 환영

- dc official App