티스토리 뷰
nvim-cmp란?
nvim-cmp는 lsp기반 자동완성 플러그인 입니다.
제 경우에는 Vim으로 코딩을 할 때 다른 IDE로 넘어가게 되는 지점이 '자동완성'이었습니다. 저는 IntelliJ의 Ideavim정도만 쓰다가 Linux환경에서 Vim으로 개발을 해야 하는 상황을 만났습다. 예를 들면 Shell script를 작성 하는 작업이라던지 리눅스에서만 지원하는 파이썬 라이브러리를 써야 할때 였습니다. 이 때는 IntelliJ를 쓸 수는 없고 Vim으로 코딩 해야했습니다.
이럴 때 '자동완성'기능이 너무나 아쉽습니다. 하지만 vim에서 자동완성 기능을 구글에 검색 해보면 설정하는게 한글로 된 문서가 별로 없고 요즘은 잘 안쓴다는 coc, youCompleteMe 등에 관한 포스팅만 있어서 세팅을 못하고 있었는데 vim.kr에서 검색을 하면서 겨우 설정에 성공 했습니다.
nvim-cmp를 쓰는 이유
앞서 말한 coc와 ycm(youCompleteMe) 대신 nvim-cmp를 고른 이유가 있습니다. coc는 node를 깔아주어야 하고 youCompleteMe는 python관련 의존성이 있는 것으로 보였습니다. 대신 nvim-cmp는 lsp를 쓴다고 해서 좀더 표준화 된 플러그인 이라는 생각이 들어서 입니다. 그리고 레딧같은데 검색 해보면 nvim-cmp가 대세라고 해서 처음 세팅 하니까 coc, ycm대신 nvim-cmp를 쓰기로 했습니다.
Prerequisite
저는 패키지 관리 도구 lazy로 했습니다. plug, packer등을 쓴다면 불가능 합니다.
Lazy는 아래 링크입니다.(주의 : LazyVim아님)
https://github.com/folke/lazy.nvim
진입장벽
설치하는데 직관적이지는 않습니다. 설치 하려고 공식 github페이지에 들어가보면 좀 난해 합니다.
https://github.com/hrsh7th/nvim-cmp
다양한 플러그인을 지원 하기 때문에 '나는 뭘 깔아야 하나?' 라는 생각이 들면서 저는 여기에서 몇번 포기 했습니다.
설정 코드
코드는 다음 위치에 아래 설정 코드를 넣고 설정을 했습니다.
위치
nvim-cmp설정 코드
return{
{
'hrsh7th/nvim-cmp',
lazy = false,
priority = 100,
dependencies = {
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-nvim-lsp-signature-help',
'onsails/lspkind.nvim',
'ray-x/cmp-treesitter',
'L3MON4D3/LuaSnip'
},
event = "InsertEnter",
config = function()
local cmp = require 'cmp'
local luasnip = require 'luasnip'
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
formatting = {
format = require 'lspkind'.cmp_format {
mode = "symbol_text",
menu = {
nvim_lsp = "[LSP]",
buffer = "[Buffer]",
latex_symbols = "[Latex]",
luasnip = "[LuaSnip]",
}
}
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
view = {
entries = {
name = 'custom',
selection_order = 'near_cursor'
}
},
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'buffer' },
{ name = 'calc' },
{ name = 'path' },
{ name = 'treesitter' },
})
}
end
}
}
dotfiles
완료된 설정파일
https://github.com/Kyeongrok/nvim-init/blob/main/lua/plugins/nvim-cmp.lua
nvim-init/lua/plugins/nvim-cmp.lua at main · Kyeongrok/nvim-init
Contribute to Kyeongrok/nvim-init development by creating an account on GitHub.
github.com
주의할 점
nvim-cmp를 활성화 시켰을 때 로딩 시간이 길어질 수 있습니다. 그럴때는 lazy옵션이 위 설정파일에는 false이지만 true로 바꿔보면 로딩속도를 빠르게 할 수 있습니다.
참고
https://github.com/racagogi/nvim-config/blob/main/lua/plugins/lsp/nvim-cmp.lua
- Total
- Today
- Yesterday
- shellscript
- 도커컨테이너
- 도커각티슈케이스
- docker container
- docker container case
- docker container tissue box
- vim
- 도커티슈박스
- 싱가폴
- 이직
- Linux
- 2017 티스토리 결산
- 도커각티슈박스
- 도커티슈케이스
- docker container tissue
- 개발자
- Sh
- docker container whale
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |