diff --git a/lua/lspconfig/configs.lua b/lua/lspconfig/configs.lua index 5056c49c2d..7219b9521f 100644 --- a/lua/lspconfig/configs.lua +++ b/lua/lspconfig/configs.lua @@ -113,6 +113,7 @@ function configs.__newindex(t, config_name, config_def) local get_root_dir = config.root_dir + local buf_read_post_autocmd_id = nil function M.launch(bufnr) bufnr = bufnr or api.nvim_get_current_buf() if not api.nvim_buf_is_valid(bufnr) then @@ -136,7 +137,7 @@ function configs.__newindex(t, config_name, config_def) end if root_dir then - api.nvim_create_autocmd('BufReadPost', { + buf_read_post_autocmd_id = api.nvim_create_autocmd('BufReadPost', { pattern = fn.fnameescape(root_dir) .. '/*', callback = function(arg) M.manager:try_add_wrapper(arg.buf, root_dir) @@ -172,6 +173,12 @@ function configs.__newindex(t, config_name, config_def) end) end + function M.shutdown() + if buf_read_post_autocmd_id then + api.nvim_del_autocmd(buf_read_post_autocmd_id) + end + end + -- Used by :LspInfo M.get_root_dir = get_root_dir M.filetypes = config.filetypes diff --git a/plugin/lspconfig.lua b/plugin/lspconfig.lua index 8eb368d871..028ae579dc 100644 --- a/plugin/lspconfig.lua +++ b/plugin/lspconfig.lua @@ -144,6 +144,10 @@ api.nvim_create_user_command('LspStop', function(info) client.stop(force) end end + local matching_configs = require('lspconfig.util').get_config_by_ft(vim.bo.filetype) + for _, config in ipairs(matching_configs) do + config.shutdown() + end end, { desc = 'Manually stops the given language client(s)', nargs = '?',