Skip to content

Instantly share code, notes, and snippets.

@nazo6
Created October 24, 2021 02:48
Show Gist options
  • Save nazo6/d87d04eab141292751654fe68190f2bd to your computer and use it in GitHub Desktop.
Save nazo6/d87d04eab141292751654fe68190f2bd to your computer and use it in GitHub Desktop.
Neovim init.lua with nvim-lspconfig, nvim-lsp-insatller and nvim-cmp
-- packer.nvimを自動でインストール
local install_path = vim.fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
local packer_bootstrap = nil
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
packer_bootstrap = vim.fn.system {
"git",
"clone",
"--depth",
"1",
"https://github.com/wbthomason/packer.nvim",
install_path,
}
end
-- プラグインをインストール
require("packer").startup(function(use)
use "wbthomason/packer.nvim"
-- Lsp関係
use "neovim/nvim-lspconfig"
use "williamboman/nvim-lsp-installer"
-- 補完関係
use "hrsh7th/nvim-cmp"
use "hrsh7th/cmp-nvim-lsp"
use "hrsh7th/cmp-vsnip"
use "hrsh7th/cmp-buffer"
use "hrsh7th/vim-vsnip"
-- null-ls
use { "jose-elias-alvarez/null-ls.nvim", requires = { "nvim-lua/plenary.nvim" } }
if packer_bootstrap then
require("packer").sync()
end
end)
-- LSPクライアントがバッファにアタッチされたときに実行される
local on_attach = function(client, bufnr)
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr, ...)
end
-- LSPサーバーのフォーマット機能を無効にする
-- client.resolved_capabilities.document_formatting = false
local opts = { noremap = true, silent = true }
buf_set_keymap("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
buf_set_keymap("n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
buf_set_keymap("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
buf_set_keymap("n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
buf_set_keymap("n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
buf_set_keymap("n", "<space>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<space>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<space>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)
buf_set_keymap("n", "<space>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
buf_set_keymap("n", "<space>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
buf_set_keymap("n", "<space>ca", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts)
buf_set_keymap("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
buf_set_keymap("n", "<space>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts)
buf_set_keymap("n", "[d", "<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", opts)
buf_set_keymap("n", "]d", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)
buf_set_keymap("n", "<space>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
end
local lsp_installer = require "nvim-lsp-installer"
lsp_installer.on_server_ready(function(server)
local opts = {}
opts.on_attach = on_attach
opts.capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())
server:setup(opts)
vim.cmd [[ do User LspAttachBuffers ]]
end)
-- nvim-cmp(補完) の設定
vim.opt.completeopt = "menu,menuone,noselect"
local cmp = require "cmp"
cmp.setup {
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = {
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.close(),
["<CR>"] = cmp.mapping.confirm { select = true },
},
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "vsnip" },
}, {
{ name = "buffer" },
}),
}
-- null-ls (formatter/linter)の設定
local nullls = require "null-ls"
nullls.config {
sources = {
nullls.builtins.formatting.prettier,
-- nullls.builtins.formatting.eslint
},
}
require("lspconfig")["null-ls"].setup {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment