如何解决默认情况下如何使用 elixirls 格式化 elixir 文件?
我使用 elixirls
lsp-client 和 efm-server
(主要用于信条)在 Neovim 中处理长生不老药文件。
我想使用 lsp-config
来格式化 elixir 文件,并希望将其设为 vim.lsp.buf.formatting()
命令的默认 lsp-client。
目前,每次我尝试保存文件时,它都会要求我选择语言服务器,如下图所示。
如何使 elixirls
成为 vim.lsp.buf.formatting()
和 vim.lsp.buf.formatting_sync(nil,100)
命令的默认语言服务器?
我的相关 init.lua
文件如下:
-----------------------------------------------------------------------------------------------
--- LSP
-----------------------------------------------------------------------------------------------
local nvim_lsp = require("lspconfig")
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local custom_attach = function(client,bufnr)
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr,...)
end
local function buf_set_option(...)
vim.api.nvim_buf_set_option(bufnr,...)
end
-- Enable completion triggered by <c-x><c-o>
buf_set_option("omnifunc","v:lua.vim.lsp.omnifunc")
-- Mappings.
local opts = {noremap = true,silent = true}
-- See `:help vim.lsp.*` for documentation on any of the below functions
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>","K","<Cmd>lua vim.lsp.buf.hover()<CR>","gi","<cmd>lua vim.lsp.buf.implementation()<CR>","<C-k>","<cmd>lua vim.lsp.buf.signature_help()<CR>","<space>wa","<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>","<space>wr","<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>","<space>wl","<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>","<space>D","<cmd>lua vim.lsp.buf.type_deFinition()<CR>","<space>rn","<cmd>lua vim.lsp.buf.rename()<CR>","<space>ca","<cmd>lua vim.lsp.buf.code_action()<CR>","gr","<cmd>lua vim.lsp.buf.references()<CR>","<space>e","<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>","[d","<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>","]d","<cmd>lua vim.lsp.diagnostic.goto_next()<CR>","<space>q","<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>","<space>f","<cmd>lua vim.lsp.buf.formatting_sync(nil,100)<CR>",opts)
-- vim.api.nvim_command("au BufWritePost <buffer> lua vim.lsp.buf.formatting()")
-- vim.api.nvim_command("au BufWritePost <buffer> lua vim.lsp.buf.formatting_sync(nil,100)")
-- autocmd BufWritePre *.lua lua vim.lsp.buf.formatting_sync(nil,100)
end
USER = vim.fn.expand("$USER")
local sumneko_binary = "/Users/" .. USER .. "/language-servers/lua-language-server/bin/macOS/lua-language-server"
local sumneko_root_path = "/Users/" .. USER .. "/language-servers/lua-language-server"
nvim_lsp.sumneko_lua.setup {
cmd = {sumneko_binary,"-E",sumneko_root_path .. "/main.lua"},on_attach = custom_attach,settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = "LuaJIT",-- Setup your lua path
path = vim.split(package.path,";")
},diagnostics = {
-- Get the language server to recognize the `vim` global
globals = {"vim"}
},workspace = {
-- Make the server aware of Neovim runtime files
library = {[vim.fn.expand("$VIMRUNTIME/lua")] = true,[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true}
}
}
}
}
vim.api.nvim_command("au BufWritePost *.lua lua vim.lsp.buf.formatting()")
vim.api.nvim_command("au BufWritePost *.ex lua vim.lsp.buf.formatting()")
-- vim.api.nvim_command("au BufWritePost *.exs lua vim.lsp.buf.formatting()")
require"lspconfig".efm.setup {
init_options = {documentFormatting = true},filetypes = {"lua","elixir"},settings = {
rootMarkers = {".git/"},languages = {
lua = {
{
formatCommand = "lua-format -i --no-keep-simple-function-one-line --no-break-after-operator --column-limit=150 --break-after-table-lb",formatStdin = true
}
}
}
}
}
local path_to_elixirls = vim.fn.expand("/Users/" .. USER .. "/language-servers/elixir-ls/rel/language_server.sh")
nvim_lsp.elixirls.setup({
cmd = {path_to_elixirls},settings = {
elixirLS = {
-- I choose to disable dialyzer for personal reasons,but
-- I would suggest you also disable it unless you are well
-- aquainted with dialzyer and kNow how to use it.
dialyzerEnabled = false,-- I also choose to turn off the auto dep fetching feature.
-- It often get's into a weird state that requires deleting
-- the .elixir_ls directory and restarting your editor.
fetchDeps = false
}
}
})
解决方法
使用 vim.lsp.buf.formatting_seq_sync()
而不是 vim.lsp.buf.formatting()
可以解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。