What
入力補完をオートで表示してくれるプラグイン
ビルトインではオムニ補完をキー操作で行えるが、
そろそろLSPのセッティングもちゃんとしようということで入れた
環境
エディター
- Neovim : 0.11.6
プラグインマネージャー
- vim-plug
手順
nvim-cmpの推奨する設定通りに進めていく
1. プラグイン
nvim-lspconfig
LSPの設定を自分で書かずとも最低限の設定をしてくれるもの
cmp-nvim-lsp
LSPとnvim-cmpの橋渡し
cmp-buffer
カレントバッファ内の単語を補完ソースとする
cmp-path
ファイルパスの補完
cmp-cmdline
nvim上でのコマンドの補完
nvim-cmp
補完フレームワーク本体
cmp-vsnip
nvim-cmpとvim-vsnipの橋渡し
vim-vsnip
スニペットエンジン
vim.cmd([[
call plug#begin()
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
" For vsnip users.
Plug 'hrsh7th/cmp-vsnip'
Plug 'hrsh7th/vim-vsnip'
call plug#end()
]])
require('lsp.init')
require('plugins.cmp')
2. 設定
LSPの設定
LSPから入力候補を取得できるようセッティング
dotfilesで管理しており別端末にクローンした初動でエラーとならないよう、
pcall()でビルトインの補完と拡張された補完データの取得を分けている
local lsp_names = {
'eslint',
'lua_ls',
'ts_ls'
}
local ok, cmp_nvim_lsp = pcall(require, 'cmp_nvim_lsp')
local capabilities = ok and cmp_nvim_lsp.default_capabilities() or vim.lsp.protocol.make_client_capabilities()
for _, name in ipairs(lsp_names) do
vim.lsp.config(name, {
capabilities = capabilities,
})
end
vim.lsp.enable(lsp_names)
local capabilites = require('cmp_nvim_lsp').default_capabilities()
nvim-cmpの設定
プラグイン経由で入力補完を使用可能にする基本的な設定や、
キーマッピングの設定
local ok, cmp = pcall(require, 'cmp')
if not ok then return end
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'vsnip' },
}, {
{ name = 'buffer' },
{ name = 'path' },
}),
})
cmp.setup.cmdline('/', {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' },
},
})
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
}, {
{ name = 'cmdline' },
}),
})
3. インストール
色々設定が終わったら、
:PlugInstall
実行でNeovim再起動して使えるはずです。
終わり