Rumah >hujung hadapan web >tutorial js >Bagaimana untuk menyediakan VueJs dalam Neovim (5 Januari)
Helo, saya menghadapi masalah menyediakan neovim dengan pemalam vuejs, jadi saya berkongsi pengetahuan tentang cara saya membuatnya berfungsi.
Artikel ini mengambil pengetahuan asas tentang cara menambah dan mengubah suai pemalam anda dengan LazyVim.
Saya menggunakan kickstart.nvim.
Pakej yang akan kami gunakan : blink.cmp untuk autolengkap, typescript-tools untuk LSP typescript, neovim/nvim-lspconfig untuk menyediakan LSP, dan Mason supaya kami boleh memasang volar.
1) Persediaan alat skrip taip:
return { 'pmizio/typescript-tools.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'neovim/nvim-lspconfig' }, opts = {}, ft = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'vue' }, config = function() require('typescript-tools').setup { on_attach = function(client, bufnr) client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end, filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'vue', }, settings = { tsserver_plugins = { '@vue/typescript-plugin', }, jsx_close_tag = { enable = true, filetypes = { 'javascriptreact', 'typescriptreact' }, }, }, } end, }
Ini ialah alat skrip taip. Ia adalah tserver, tetapi lebih pantas.
Dalam jadual tserver_plugins, kami memanggil @vue/typescript-plugin.
Volar versi terkini, ia membenamkan dirinya dalam LSP skrip taip, memberikannya keupayaan.
Kami sebenarnya perlu memasang pemalam ini.
Sebaik-baiknya berdasarkan setiap projek, saya memasangnya secara global pada masa ini.
npm i -g @vue/typescript-plugin
2) LspConfig:
Kami menggunakan neovim/nvim-lspconfig untuk menyediakan kefungsian lsp.
return { 'neovim/nvim-lspconfig', dependencies = { { 'williamboman/mason.nvim', config = true }, 'williamboman/mason-lspconfig.nvim', 'WhoIsSethDaniel/mason-tool-installer.nvim', { 'j-hui/fidget.nvim', opts = {} }, 'saghen/blink.cmp', }, config = function() local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('blink.cmp').get_lsp_capabilities(capabilities) local servers = { volar = { 'vue' }, lua_ls = { settings = { Lua = { completion = { callSnippet = 'Replace' }, }, }, }, } require('mason').setup() local ensure_installed = vim.tbl_keys(servers) -- vim.list_extend(ensure_installed, { 'stylua' }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } -- Setup mason-lspconfig require('mason-lspconfig').setup { ensure_installed = ensure_installed, handlers = { function(server_name) local opts = servers[server_name] or {} opts.capabilities = vim.tbl_deep_extend('force', {}, capabilities, opts.capabilities or {}) require('lspconfig')[server_name].setup(opts) end, }, } -- Setup LspAttach autocmd for keymaps and additional functionality vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), callback = function(event) local map = function(keys, func, desc, mode) mode = mode or 'n' vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) end map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') map('<leader>cr', vim.lsp.buf.rename, '[R]e[n]ame') map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' }) map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') local client = vim.lsp.get_client_by_id(event.data.client_id) if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then local highlight_group = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { buffer = event.buf, group = highlight_group, callback = vim.lsp.buf.document_highlight, }) vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI'}, { buffer = event.buf, group = highlight_group, callback = vim.lsp.buf.clear_references, }) end end, }) end, },
Perkara yang paling penting di sini ialah kami melepasi blink.cmp dan kami menyediakan volar sebagai LSP kami untuk fail .vue.
Buka neovim dan pasang volar.
:MasonInstall vue-language-server
Mulakan semula Neovim dan ini sepatutnya. Anda sepatutnya mempunyai semua fungsi, pergi ke definisi, pergi ke rujukan, ralat lsp dll.
Autolengkapkan konfigurasi
Jika anda mempunyai pemalam autolengkap berfungsi, abaikan ini.
Saya akan berkongsi konfigurasi saya untuk blink.cmp sekiranya anda memerlukannya.
return { 'saghen/blink.cmp', -- dependencies = { 'rafamadriz/friendly-snippets', 'onsails/lspkind.nvim' }, dependencies = { 'onsails/lspkind.nvim' }, version = '*', ---@module 'blink.cmp' --- ---@type blink.cmp.Config opts = { keymap = { ['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' }, ['<C-e>'] = { 'hide', 'fallback' }, ['<CR>'] = { 'accept', 'fallback' }, ['<Tab>'] = { function(cmp) return cmp.select_next() end, 'snippet_forward', 'fallback', }, ['<S-Tab>'] = { function(cmp) return cmp.select_prev() end, 'snippet_backward', 'fallback', }, ['<Up>'] = { 'select_prev', 'fallback' }, ['<Down>'] = { 'select_next', 'fallback' }, ['<C-p>'] = { 'select_prev', 'fallback' }, ['<C-n>'] = { 'select_next', 'fallback' }, ['<C-up>'] = { 'scroll_documentation_up', 'fallback' }, ['<C-down>'] = { 'scroll_documentation_down', 'fallback' }, }, appearance = { use_nvim_cmp_as_default = true, nerd_font_variant = 'mono', }, completion = { accept = { auto_brackets = { enabled = true, }, }, list = { selection = function(ctx) return ctx.mode == 'cmdline' and 'auto_insert' or 'preselect' end, }, -- menu = { border = 'rounded', cmdline_position = function() if vim.g.ui_cmdline_pos ~= nil then local pos = vim.g.ui_cmdline_pos -- (1, 0)-indexed return { pos[1] - 1, pos[2] } end local height = (vim.o.cmdheight == 0) and 1 or vim.o.cmdheight return { vim.o.lines - height, 0 } end, draw = { columns = { { 'kind_icon', 'label', gap = 1 }, { 'kind' }, }, components = { kind_icon = { text = function(item) local kind = require('lspkind').symbol_map[item.kind] or '' return kind .. ' ' end, highlight = 'CmpItemKind', }, label = { text = function(item) return item.label end, highlight = 'CmpItemAbbr', }, kind = { text = function(item) return item.kind end, highlight = 'CmpItemKind', }, }, }, }, }, sources = { default = { 'lsp', 'path', 'buffer', 'snippets' }, cmdline = {}, providers = { lsp = { min_keyword_length = 2, -- Number of characters to trigger porvider score_offset = 0, -- Boost/penalize the score of the items }, path = { min_keyword_length = 0, }, snippets = { min_keyword_length = 2, }, buffer = { min_keyword_length = 2, }, }, }, }, },
Atas ialah kandungan terperinci Bagaimana untuk menyediakan VueJs dalam Neovim (5 Januari). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!