Neovim 代码操作列表,扩展名为 mason lsp?

问题描述 投票:0回答:1

现在我使用 mason 来安装我需要的所有 lsp,并使用 null_ls 进行诊断和修复代码。但是我在代码操作方面遇到问题,例如在 jsx 代码中我想导入 useState,我调用代码操作,但列表并不总是有我需要的操作,虽然有时它是存在的,但也有很多不必要的操作jsx 代码不需要,例如有与样式相关的操作 - stylelint,但 jsx 中不需要它们。您能告诉我是否可以通过文件扩展名来确定将连接哪些服务器?或者也许有更方便的选择来解决这个问题?

这是我的 lsp 配置现在的样子

local lsp = require('lsp-zero').preset({})

lsp.set_preferences({
    suggest_lsp_servers = false,
    set_lsp_keymaps = false,
    sign_icons = {error = '☢️', warn = '⚠️', hint = 'H', info = 'I'}
})

lsp.ensure_installed({
    'lua_ls', 'tsserver', -- 'eslint',
    -- 'stylelint',
    -- 'html',
    -- 'prettier',
    'emmet_ls'
    -- 'cssls',
    -- 'cssmodules_ls',
})
local masontool = require('mason-tool-installer')
masontool.setup({
    ensure_installed = {
        'emmet-ls', 'eslint-lsp', 'json-lsp', 'lua-language-server',
        'stylelint-lsp', 'typescript-language-server'

    }
})

lsp.on_attach(function(client, bufnr)
    lsp.default_keymaps({buffer = bufnr})
    local opts = {buffer = bufnr, remap = false}
    vim.keymap.set("n", "gt", function() vim.lsp.buf.definition() end, opts)
    vim.keymap.set("n", "gk", function() vim.lsp.buf.hover() end, opts)
    vim.keymap.set("n", "<leader>vws",
                   function() vim.lsp.buf.workspace_symbol() end, opts)
    -- vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts)
    vim.keymap.set("n", "dn", function() vim.diagnostic.goto_next() end, opts)
    vim.keymap.set("n", "dp", function() vim.diagnostic.goto_prev() end, opts)
    vim.keymap
        .set("n", "<M-CR>", function() vim.lsp.buf.code_action() end, opts)
    -- vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end,
    --                opts)
    vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end,
                   opts)
    vim.keymap
        .set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
    vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end,
                   opts)
end)

-- format
lsp.format_on_save({
    format_opts = {async = false, timeout_ms = 10000},
    servers = {
        ['null-ls'] = {
            'javascript', 'typescript', 'typescriptreact', 'javascriptreact',
            'json', 'lua', 'scss', 'html', 'css'
        }
    }
})

local null_ls = require("null-ls")

null_ls.setup({
    sources = {
        null_ls.builtins.formatting.prettier,
        null_ls.builtins.formatting.stylelint,
        null_ls.builtins.formatting.lua_format,
        null_ls.builtins.diagnostics.eslint,
        null_ls.builtins.diagnostics.stylelint,
        null_ls.builtins.diagnostics.luacheck
    }
})

local lspconfig = require('lspconfig')

-- emmet
-- local configs = require('lspconfig/configs')
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true

lspconfig.emmet_ls.setup({
    -- on_attach = on_attach,
    capabilities = capabilities,
    filetypes = {
        'html', 'typescriptreact', 'javascriptreact', 'css', 'sass', 'scss',
        'less', 'lua'
    },
    init_options = {
        html = {
            options = {
                -- For possible options, see: https://github.com/emmetio/emmet/blob/master/src/config.ts#L79-L267
                ["bem.enabled"] = true
            }
        }
    }
})
lspconfig.lua_ls.setup(lsp.nvim_lua_ls())

lsp.setup()

local cmp = require('cmp')
local cmp_action = require('lsp-zero').cmp_action()
local luasnip = require("luasnip")
-- require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippet/" })
-- require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load {
    paths = {"~/.config/nvim/user/snippets/"}
}

--   פּ ﯟ   some other good icons
local kind_icons = {
    Text = "",
    Method = "m",
    Function = "",
    Constructor = "",
    Field = "",
    Variable = "",
    Class = "",
    Interface = "",
    Module = "",
    Property = "",
    Unit = "",
    Value = "",
    Enum = "",
    Keyword = "",
    Snippet = "",
    Color = "",
    File = "",
    Reference = "",
    Folder = "",
    EnumMember = "",
    Constant = "",
    Struct = "",
    Event = "",
    Operator = "",
    TypeParameter = ""
}

cmp.setup({
    snippet = {
        expand = function(args)
            luasnip.lsp_expand(args.body) -- For `luasnip` users.
        end
    },

    sources = {
        {name = "luasnip"}, {name = 'nvim_lsp'}, {name = 'path'},
        {name = 'emmet_ls'},
        -- {name = 'emmet-language-server', keyword_length = 4},
        {name = 'copilot'}, {name = 'buffer'}
    },
    window = {
        documentation = {
            border = {'╭', '─', '╮', '│', '╯', '─', '╰', '│'}
        },
        completion = {
            border = {'╭', '─', '╮', '│', '╯', '─', '╰', '│'},
            winhighlight = 'Normal:CmpPmenu,FloatBorder:CmpPmenuBorder,CursorLine:PmenuSel,Search:None'
        }
    },

    mapping = {
        ['<CR>'] = cmp.mapping.confirm({select = true}),
        ['<C-f>'] = cmp_action.luasnip_jump_forward(),
        ['<C-b>'] = cmp_action.luasnip_jump_backward()
    }

})

neovim nvim-lspconfig nvim.cmp
1个回答
0
投票

尝试这样做:在设置中指定您想要的代码操作缓冲区

`null_ls.setup({
     sources = {
         null_ls.builtins.formatting.prettier,
         null_ls.builtins.diagnostics.eslint_d.with({
         diagnostics_format = '[eslint] #{m}\n(#{c})'
      }),
      null_ls.builtins.code_actions.eslint_d
    }
})`
© www.soinside.com 2019 - 2024. All rights reserved.