Lua Neovim 0.5在保存时组织导入
如何在保存时组织导入?我正在使用此命令创建“组织导入”命令Lua Neovim 0.5在保存时组织导入,lua,neovim,nvim-lspconfig,Lua,Neovim,Nvim Lspconfig,如何在保存时组织导入?我正在使用此命令创建“组织导入”命令 _G.lsp_organize_imports = function() local params = { command = "_typescript.organizeImports", arguments = {vim.api.nvim_buf_get_name(0)}, title = "" } vim.lsp.buf.
_G.lsp_organize_imports = function()
local params = {
command = "_typescript.organizeImports",
arguments = {vim.api.nvim_buf_get_name(0)},
title = ""
}
vim.lsp.buf.execute_command(params)
end
local on_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 }
local buf_map = vim.api.nvim_buf_set_keymap
vim.cmd("command! LspDef lua vim.lsp.buf.definition()")
vim.cmd("command! LspFormatting lua vim.lsp.buf.formatting_sync()")
vim.cmd("command! LspCodeAction lua vim.lsp.buf.code_action()")
vim.cmd("command! LspHover lua vim.lsp.buf.hover()")
vim.cmd("command! LspRename lua vim.lsp.buf.rename()")
vim.cmd("command! LspOrganize lua lsp_organize_imports()")
vim.cmd("command! LspRefs lua vim.lsp.buf.references()")
vim.cmd("command! LspTypeDef lua vim.lsp.buf.type_definition()")
vim.cmd("command! LspImplementation lua vim.lsp.buf.implementation()")
vim.cmd("command! LspDiagPrev lua vim.lsp.diagnostic.goto_prev()")
vim.cmd("command! LspDiagNext lua vim.lsp.diagnostic.goto_next()")
vim.cmd(
"command! LspDiagLine lua vim.lsp.diagnostic.show_line_diagnostics()")
vim.cmd("command! LspSignatureHelp lua vim.lsp.buf.signature_help()")buf_map(bufnr, "n", "gd", ":LspDef<CR>", {silent = true})
buf_map(bufnr, "n", "gr", ":LspRename<CR>", {silent = true})
buf_map(bufnr, "n", "gR", ":LspRefs<CR>", {silent = true})
buf_map(bufnr, "n", "gy", ":LspTypeDef<CR>", {silent = true})
buf_map(bufnr, "n", "K", ":LspHover<CR>", {silent = true})
buf_map(bufnr, "n", "gs", ":LspOrganize<CR>", {silent = true})
buf_map(bufnr, "n", "[a", ":LspDiagPrev<CR>", {silent = true})
buf_map(bufnr, "n", "]a", ":LspDiagNext<CR>", {silent = true})
buf_map(bufnr, "n", "ga", ":LspCodeAction<CR>", {silent = true})
buf_map(bufnr, "n", "<Leader>a", ":LspDiagLine<CR>", {silent = true})
buf_map(bufnr, "i", "<C-x><C-x>", "<cmd> LspSignatureHelp<CR>",
{silent = true})
if client.resolved_capabilities.document_formatting then
vim.api.nvim_exec([[
augroup LspAutocommands
autocmd! * <buffer>
autocmd BufWritePre <buffer> LspOrganize
autocmd BufWritePre <buffer> LspFormatting
augroup END
]], true)
end
end
\u G.lsp\u组织\u导入=函数()
本地参数={
command=“\u typescript.organizeImports”,
参数={vim.api.nvim_buf_get_name(0)},
title=“”
}
vim.lsp.buf.execute_命令(params)
结束
本地on_attach=功能(客户端,bufnr)
本地函数buf_set_keymap(…)vim.api.nvim_buf_set_keymap(bufnr…)结束
本地函数buf_set_选项(…)vim.api.nvim_buf_set_选项(bufnr…)结束
--启用由触发的完成
buf_set_选项('omnifunc','v:lua.vim.lsp.omnifunc'))
--映射。
本地选项={noremap=true,silent=true}
本地buf_map=vim.api.nvim_buf_set_keymap
cmd(“command!LspDef lua vim.lsp.buf.definition()”)
cmd(“命令!lsp格式化luavim.lsp.buf.formatting_sync()”)
cmd(“command!LspCodeAction lua vim.lsp.buf.code_action()”)
cmd(“command!LspHover lua vim.lsp.buf.hover()”)
cmd(“command!LspRename lua vim.lsp.buf.rename()”)
cmd(“command!LspOrganize lua lsp\u organize\u imports()”)
cmd(“command!LspRefs lua vim.lsp.buf.references()”)
cmd(“command!LspTypeDef lua vim.lsp.buf.type_definition()”)
cmd(“command!lsp实现luavim.lsp.buf.implementation()”)
cmd(“command!lspdiagprov lua vim.lsp.diagnostic.goto_prev()”)
cmd(“command!LspDiagNext lua vim.lsp.diagnostic.goto_next()”)
vim.cmd(
“命令!lspdiaglue-vim.lsp.diagnostic.show_-line_-diagnostics()”)
cmd(“command!LspSignatureHelp lua vim.lsp.buf.signature_help()”)buf_映射(bufnr,“n”,“gd”,“:LspDef”,{silent=true})
buf_映射(bufnr,“n”,“gr”,“LspRename”,“silent=true})
buf_映射(bufnr,“n”,“gR”,“LspRefs”,“silent=true})
buf_映射(bufnr,“n”,“gy”,“LspTypeDef”,“silent=true})
buf_映射(bufnr,“n”,“K”,“LspHover”,“silent=true})
buf_映射(bufnr,“n”,“gs”,“LspOrganize”,“silent=true})
buf_映射(bufnr,n,“[a,”:lspdiagprov,{silent=true})
buf_映射(bufnr,“n”,“]a”,“:lspdiagnet”,{silent=true})
buf_映射(bufnr,“n”,“ga”,“LspCodeAction”,“silent=true})
buf_映射(bufnr,“n”,“a”,“LspDiagLine”,“silent=true})
buf_映射(bufnr,“i”,“LspSignatureHelp”,
{silent=true})
如果client.resolved_capabilities.document_格式化,则
vim.api.nvim_exec([[
augroup lspautommands
autocmd!*
autocmd BufWritePre LspOrganize
自动写入预LSP格式
螺旋端
]],对)
结束
结束
我可以这样做:LspOrganize组织导入,但在保存缓冲区之前它不会这样做。自动命令组是执行的,但导入是在保存文件后组织的,因为我认为这是一个异步任务。有人能帮我做这个吗?我想组织导入,然后保存缓冲区。而不是使用
vim.lsp.buf.execute_命令。
您想使用neovim lsp API提供的同步版本。查看:help vim.lsp.buf\u request\u sync
。使用此功能,您可以编写Organize导入功能的同步版本
_G.lsp\u组织\u导入\u同步=功能(bufnr)
--如果未传递bufnr,则获取当前bufnr
如果不是bufnr,那么bufnr=vim.api.nvim\u get\u current\u buf()结束
--请求的参数
本地参数={
command=“\u typescript.organizeImports”,
参数={vim.api.nvim_buf_get_name(bufnr)},
title=“”
}
--执行同步请求
--500毫秒超时取决于文件大小,可能需要更大的超时
vim.lsp.buf_请求_同步(bufnr,“工作区/执行命令”,参数,500)
结束
您能告诉我tsserver命令(如“\u typescript.organizeImports”)的可用资源吗?@AritraDattagupta看一下,它提供了在vscode之外使用服务器的大致概述。有关特定命令,请查看