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之外使用服务器的大致概述。有关特定命令,请查看