local kind_icons = { Text = "", Method = "󰆧", Function = "󰊕", Constructor = "", Field = "󰇽", Variable = "󰂡", Class = "󰠱", Interface = "", Module = "", Property = "󰜢", Unit = "", Value = "󰎠", Enum = "", Keyword = "󰌋", Snippet = "", Color = "󰏘", File = "󰈙", Reference = "", Folder = "󰉋", EnumMember = "", Constant = "󰏿", Struct = "", Event = "", Operator = "󰆕", TypeParameter = "󰅲", } local has_words_before = function() unpack = unpack or table.unpack local line, col = unpack(G.api.nvim_win_get_cursor(0)) return col ~= 0 and G.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') == nil end local feedkey = function(key, mode) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) end return { { -- lsp的config "neovim/nvim-lspconfig", config = function() require 'lspconfig'.lua_ls.setup(require('lsp.lua')) require 'lspconfig'.clangd.setup(require('lsp.c')) -- require'lspconfig'.bash_ls.setup(require('lsp.bash')) require 'lspconfig'.pyright.setup(require('lsp.pyright')) G.map({ { 'n', 'rn', 'lua vim.lsp.buf.rename()' }, { 'n', 'gd', 'lua vim.lsp.buf.definition()' }, { 'n', 'gh', 'lua vim.lsp.buf.hover()' }, { 'n', 'gD', 'lua vim.lsp.buf.declaration()' }, { 'n', 'gi', 'lua vim.lsp.buf.implementation()' }, { 'n', 'gr', 'lua vim.lsp.buf.references()' }, { 'n', '', 'lua vim.lsp.buf.format()' }, }) end }, { -- lsp 下载器 "williamboman/mason.nvim", config = function() require("mason").setup({}) end }, { -- 'simrat39/symbols-outline.nvim', config = function() local opts = { highlight_hovered_item = true, show_guides = true, auto_preview = false, position = 'right', relative_width = true, width = 25, auto_close = false, show_numbers = false, show_relative_numbers = false, show_symbol_details = true, preview_bg_highlight = 'Pmenu', autofold_depth = nil, auto_unfold_hover = true, fold_markers = { '', '' }, wrap = false, keymaps = { -- These keymaps can be a string or a table for multiple keys close = { "", "q" }, goto_location = "", focus_location = "h", hover_symbol = "", toggle_preview = "K", rename_symbol = "r", code_actions = "a", fold = "o", unfold = "l", fold_all = "W", unfold_all = "E", fold_reset = "R", }, lsp_blacklist = {}, symbol_blacklist = {}, symbols = { File = { icon = "", hl = "@text.uri" }, Module = { icon = "", hl = "@namespace" }, Namespace = { icon = "", hl = "@namespace" }, Package = { icon = "", hl = "@namespace" }, Class = { icon = "𝓒", hl = "@type" }, Method = { icon = "ƒ", hl = "@method" }, Property = { icon = "", hl = "@method" }, Field = { icon = "", hl = "@field" }, Constructor = { icon = "", hl = "@constructor" }, Enum = { icon = "ℰ", hl = "@type" }, Interface = { icon = "ﰮ", hl = "@type" }, Function = { icon = "", hl = "@function" }, Variable = { icon = "", hl = "@constant" }, Constant = { icon = "", hl = "@constant" }, String = { icon = "𝓐", hl = "@string" }, Number = { icon = "#", hl = "@number" }, Boolean = { icon = "⊨", hl = "@boolean" }, Array = { icon = "", hl = "@constant" }, Object = { icon = "⦿", hl = "@type" }, Key = { icon = "🔐", hl = "@type" }, Null = { icon = "NULL", hl = "@type" }, EnumMember = { icon = "", hl = "@field" }, Struct = { icon = "𝓢", hl = "@type" }, Event = { icon = "🗲", hl = "@type" }, Operator = { icon = "+", hl = "@operator" }, TypeParameter = { icon = "𝙏", hl = "@parameter" }, Component = { icon = "", hl = "@function" }, Fragment = { icon = "", hl = "@constant" }, }, } require("symbols-outline").setup(opts) G.map({ { "n", "", "SymbolsOutline" }, }) end }, { -- lsp补全 'hrsh7th/cmp-nvim-lsp', -- { name = 'nvim_lua' } 'hrsh7th/cmp-buffer', -- { name = 'buffer' }, 'hrsh7th/cmp-path', -- { name = 'path' } 'hrsh7th/cmp-cmdline', -- { name = 'cmdline' } 'hrsh7th/vim-vsnip', 'hrsh7th/cmp-vsnip', 'onsails/lspkind-nvim', { "hrsh7th/nvim-cmp", config = function() local cmp = require('cmp') local lspkind = require('lspkind') cmp.setup { snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. end, }, sources = cmp.config.sources({ { name = 'vnsip' }, { name = 'nvim_lsp' }, { name = 'buffer' }, { name = 'path' }, { name = 'cmdline' }, }), mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif vim.fn["vsnip#available"](1) == 1 then feedkey("(vsnip-expand-or-jump)", "") elseif has_words_before() then cmp.complete() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() elseif vim.fn["vsnip#jumpable"](-1) == 1 then feedkey("(vsnip-jump-prev)", "") end end, { "i", "s" }), }), window = { }, fomatting = { format = lspkind.cmp_format({ with_text = true, maxwidth = 50, mode = 'symbol', before = function(entry, vim_item) vim_item.kind = kind_icons[vim_item.kind] vim_item.menu = ({ buffer = "[Buffer]", nvim_lsp = "[LSP]", })[entry.source.name] return vim_item end, }) }, } cmp.setup.cmdline('/', { view = { entries = { name = 'wildmenu', separator = '|' } }, }) end, }, { -- 语法高亮 -- 'nvim-treesitter/nvim-treesitter', config = function() require 'nvim-treesitter.configs'.setup { ensure_installed = {}, indent = { enable = true }, sync_install = false, auto_install = true, highlight = { enable = true, disable = function(lang, buf) local max_filesize = 100 * 1024 -- 100 KB local ok, stats = pcall(G.loop.fs_stat, G.api.nvim_buf_get_name(buf)) if ok and stats and stats.size > max_filesize then return true end end, additional_vim_regex_highlighting = false, }, parsers = { html = { install_info = { url = "https://github.com/ikatyang/tree-sitter-vue", files = { "src/parser.c" }, branch = "main" } } } } end }, }, { "" }, }