您好,我在使用 vuejs 插件设置 neovim 时遇到了问题,所以我正在分享有关如何让它工作的知识。
本文假设您了解如何使用 LazyVim 添加和修改插件的基本知识。
我正在使用kickstart.nvim。
我们将使用的包:blink.cmp 用于自动完成,typescript-tools 用于 typescript LSP,neovim/nvim-lspconfig 设置LSP 和 Mason 这样我们就可以安装掌侧。
1) Typescript 工具设置:
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, }
这是打字工具。它是 tsserver,但速度更快。
在 tsserver_plugins 表中,我们调用 @vue/typescript-plugin.
Volar 的最新版本,它将自身嵌入到 typescript LSP 中,为其提供功能。
我们必须实际安装这个插件。
理想情况下,我现在在每个项目的基础上安装了它。
npm i -g @vue/typescript-plugin
2) LspConfig:
我们正在使用 neovim/nvim-lspconfig 来设置 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, }, </leader></leader></leader></leader></leader>
这里最重要的是我们传递 blink.cmp 并且我们将 volar 设置为 .vue 文件的 LSP。
打开 neovim 并安装 volar。
:MasonInstall vue-language-server
重新启动 Neovim 就可以了。您应该拥有所有功能,转到定义、转到参考、lsp 错误等。
自动完成配置
如果您有功能性自动完成插件,忽略此。
我将分享我的 blink.cmp 配置,以防您需要。
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, }, }, }, }, }, </c-down></c-up></c-n></c-p></down></up></s-tab></tab></cr></c-e></c-space>
以上是如何在 Neovim 中设置 VueJ(1 月 5 日)的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!