- commit
- 7c2d70e
- parent
- 1ec081d
- author
- Eric Bower
- date
- 2025-07-22 23:17:45 -0400 EDT
refactor(nvim): use `vim.lsp.enable`
2 files changed,
+44,
-48
+40,
-48
1@@ -36,6 +36,7 @@ map({ "n", "v", "i", "t" }, "<C-space><C-d>", function()
2 end)
3
4 local autocmd = vim.api.nvim_create_autocmd
5+local augroup = vim.api.nvim_create_augroup
6 autocmd("Filetype", { pattern = { "qf" }, command = "setlocal wrap" })
7 autocmd("Filetype", { pattern = { "make" }, command = "setlocal tabstop=4 shiftwidth=4 softtabstop=4" })
8 autocmd("Filetype", {
9@@ -43,7 +44,7 @@ autocmd("Filetype", {
10 command = "setlocal wrap tw=79 formatoptions+=t tabstop=2 shiftwidth=2 softtabstop=2",
11 })
12 autocmd("FileType", {
13- group = vim.api.nvim_create_augroup("close_with_q", { clear = true }),
14+ group = augroup("my.close_with_q", { clear = true }),
15 pattern = { "help", "man", "qf", "scratch", "fugitive", "nvim-pack" },
16 callback = function(args)
17 map("n", "q", "<cmd>quit<cr>", { buffer = args.buf })
18@@ -54,57 +55,46 @@ function setup_lsp()
19 map("n", "<leader>e", vim.diagnostic.open_float, opts)
20 map("n", "<leader>q", vim.diagnostic.setloclist, opts)
21
22- local on_attach = function(client, bufnr)
23- local chars = {}
24- for i = 32, 126 do
25- table.insert(chars, string.char(i))
26- end
27- -- auto-complete for any char
28- client.server_capabilities.completionProvider.triggerCharacters = chars
29- vim.lsp.completion.enable(true, client.id, bufnr, { -- built-in auto-complete
30- autotrigger = true,
31- convert = function(item)
32- return { abbr = item.label:gsub("%b()", "") }
33- end,
34- })
35- local bufopts = { noremap = true, silent = true, buffer = bufnr }
36+ local cfg = vim.lsp.enable
37+ -- npm i -g vscode-langservers-extracted
38+ cfg("cssls")
39+ cfg("denols")
40+ cfg("gopls")
41+ cfg("html")
42+ cfg("jsonls")
43+ -- npm i -g pyright
44+ cfg("pyright")
45+ -- npm i -g typescript typescript-language-server
46+ cfg("ts_ls")
47+ cfg("zls")
48+ -- os package mgr: lua-language-server
49+ cfg("lua_ls")
50
51- -- See `:help vim.lsp.*` for documentation on any of the below functions
52- map("n", "<leader>d", vim.lsp.buf.definition, bufopts)
53- map("n", "<leader>D", vim.lsp.buf.type_definition, bufopts)
54- map("n", "<leader>h", vim.lsp.buf.hover, bufopts)
55- map("n", "<leader>r", vim.lsp.buf.references, bufopts)
56- map("n", "<leader>i", vim.lsp.buf.implementation, bufopts)
57- map("i", "<C-k>", vim.lsp.completion.get, bufopts) -- open completion menu manually
58+ local chars = {} -- trigger autocompletion on EVERY keypress
59+ for i = 32, 126 do
60+ table.insert(chars, string.char(i))
61 end
62
63- local nvim_lsp = require("lspconfig")
64- function handler(server_name)
65- local opts = {
66- capabilities = capabilities,
67- on_attach = on_attach,
68- }
69- if server_name == "denols" then
70- opts.root_dir = nvim_lsp.util.root_pattern("deno.json", "deno.jsonc")
71- elseif server_name == "ts_ls" then
72- opts.root_dir = nvim_lsp.util.root_pattern("package.json")
73- -- https://github.com/neovim/nvim-lspconfig/issues/2507#issuecomment-1471438640
74- opts.single_file_support = false
75- end
76- nvim_lsp[server_name].setup(opts)
77- end
78+ autocmd("LspAttach", {
79+ group = augroup("my.lsp", {}),
80+ callback = function(args)
81+ local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
82+ if client:supports_method("textDocument/implementation") then
83+ local bufopts = { noremap = true, silent = true, buffer = args.buf }
84+ map("n", "<leader>d", vim.lsp.buf.definition, bufopts)
85+ map("n", "<leader>D", vim.lsp.buf.type_definition, bufopts)
86+ map("n", "<leader>h", vim.lsp.buf.hover, bufopts)
87+ map("n", "<leader>r", vim.lsp.buf.references, bufopts)
88+ map("n", "<leader>i", vim.lsp.buf.implementation, bufopts)
89+ map("i", "<C-k>", vim.lsp.completion.get, bufopts) -- open completion menu manually
90+ end
91
92- -- npm i -g vscode-langservers-extracted
93- handler("cssls")
94- handler("denols")
95- handler("gopls")
96- handler("html")
97- handler("jsonls")
98- -- npm i -g pyright
99- handler("pyright")
100- -- npm i -g typescript typescript-language-server
101- handler("ts_ls")
102- handler("zls")
103+ if client:supports_method("textDocument/completion") then
104+ client.server_capabilities.completionProvider.triggerCharacters = chars
105+ vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
106+ end
107+ end,
108+ })
109 end
110
111 function setup_fzf()
112@@ -169,6 +159,7 @@ local ts_parsers = {
113 local nts = require("nvim-treesitter")
114 nts.install(ts_parsers)
115 autocmd("PackChanged", {
116+ group = augroup("my.pack", {}),
117 callback = function(args)
118 local spec = args.data.spec
119 if spec and spec.name == "nvim-treesitter" and args.data.kind == "update" then
120@@ -193,6 +184,7 @@ require("neoscroll").setup({ duration_multiplier = 0.4 })
121 require("gitlinker").setup({})
122
123 autocmd("FileType", { -- enable treesitter highlighting and indents
124+ group = augroup("my.treesitter", {}),
125 callback = function(args)
126 local filetype = args.match
127 local lang = vim.treesitter.language.get_lang(filetype)
+4,
-0
1@@ -97,6 +97,10 @@ Host ppico
2 IdentitiesOnly yes
3 IdentityFile ~/.ssh/id_ed25519_pico
4
5+ ControlPath ~/.ssh/cm-%r@%h:%p
6+ ControlMaster auto
7+ ControlPersist 10m
8+
9 Host pipe
10 HostName pipe.pico.sh
11 IdentitiesOnly yes