diff --git a/lua/user/cmp.lua b/lua/user/cmp.lua index 27565ea..5fc733d 100644 --- a/lua/user/cmp.lua +++ b/lua/user/cmp.lua @@ -13,6 +13,11 @@ if not snip_status_ok then return end +local lspkind_status_ok, lspkind = pcall(require, "lspkind") +if not lspkind_status_ok then + return +end + require("luasnip/loaders/from_vscode").lazy_load() local check_backspace = function() @@ -22,34 +27,6 @@ end npm.setup({}) -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) @@ -99,19 +76,22 @@ cmp.setup({ }, formatting = { fields = { "abbr", "kind", "menu" }, - format = function(entry, vim_item) - vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) - vim_item.menu = ({ - nvim_lsp = "[LSP]", - copilot = "[COPILOT]", - npm = "[NPM]", - nvim_lua = "[NVIM_LUA]", - luasnip = "[SNIPPET]", - buffer = "[BUFFER]", - path = "[PATH6]", - })[entry.source.name] - return vim_item - end, + format = lspkind.cmp_format({ + mode = "symbol_text", + maxwidth = 50, + before = function(entry, vim_item) + vim_item.menu = ({ + nvim_lsp = "[LSP]", + copilot = "[COPILOT]", + npm = "[NPM]", + nvim_lua = "[NVIM_LUA]", + luasnip = "[SNIPPET]", + buffer = "[BUFFER]", + path = "[PATH]", + })[entry.source.name] + return vim_item + end, + }), }, sources = { { name = "copilot" }, diff --git a/lua/user/lsp/handlers.lua b/lua/user/lsp/handlers.lua index af72d1a..450f854 100644 --- a/lua/user/lsp/handlers.lua +++ b/lua/user/lsp/handlers.lua @@ -52,29 +52,22 @@ end local function lsp_keymaps(bufnr) local opts = { noremap = true, silent = true } - vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", ":lua vim.lsp.buf.declaration()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", ":lua vim.lsp.buf.definition()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "K", ":lua vim.lsp.buf.hover()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", ":lua vim.lsp.buf.implementation()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "", ":lua vim.lsp.buf.signature_help()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "grn", ":lua vim.lsp.buf.rename()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", ":lua vim.lsp.buf.references()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gca", ":lua vim.lsp.buf.code_action()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "gl", ":lua vim.diagnostic.open_float()", opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", ':lua vim.diagnostic.goto_prev({ border = "rounded" })', opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", ':lua vim.diagnostic.goto_next({ border = "rounded" })', opts) - vim.api.nvim_buf_set_keymap(bufnr, "n", "q", "lua vim.diagnostic.setloclist()", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", ":Lspsaga lsp_finder", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", ":Lspsaga preview_definition", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "K", ":Lspsaga hover_doc", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", ":Lspsaga implement", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "", ":Lspsaga signature_help", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "grn", ":Lspsaga rename", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", ":Lspsaga lsp_finder", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "gca", ":Lspsaga code_action", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", ":Lspsaga diagnostic_jump_next", opts) + vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", ":Lspsaga diagnostic_jump_prev", opts) vim.cmd([[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]) end M.on_attach = function(client, bufnr) lsp_keymaps(bufnr) lsp_highlight_document(client) - - if client.server_capabilities.documentSymbolProvider then - local navic = require("nvim-navic") - navic.attach(client, bufnr) - end end local capabilities = vim.lsp.protocol.make_client_capabilities() diff --git a/lua/user/lsp/init.lua b/lua/user/lsp/init.lua index 16fd3d1..76b2eac 100644 --- a/lua/user/lsp/init.lua +++ b/lua/user/lsp/init.lua @@ -2,3 +2,5 @@ require("user.lsp.handlers").setup() require("user.lsp.mason") require("user.lsp.nullls") require("user.lsp.signature") +require("user.lsp.lspsaga") +require("user.lsp.lightbulb") diff --git a/lua/user/lsp/lspsaga.lua b/lua/user/lsp/lspsaga.lua new file mode 100644 index 0000000..0c30844 --- /dev/null +++ b/lua/user/lsp/lspsaga.lua @@ -0,0 +1,13 @@ +local status_ok, lspsaga = pcall(require, "lspsaga") +if not status_ok then + return +end + +lspsaga.init_lsp_saga({ + symbol_in_winbar = { + enable = true, + separator = " ", + show_file = true, + click_support = false, + }, +}) diff --git a/lua/user/options.lua b/lua/user/options.lua index a6eae2f..dad6ca3 100644 --- a/lua/user/options.lua +++ b/lua/user/options.lua @@ -36,7 +36,6 @@ vim.opt.incsearch = true vim.opt.colorcolumn = "120" vim.opt.list = true vim.opt.listchars:append("lead:.") -vim.opt.winbar = "%{%v:lua.require'user.winbar'.get_winbar()%}" vim.cmd("set whichwrap+=<,>,[,],h,l") vim.cmd([[set iskeyword+=-]]) diff --git a/lua/user/plugins.lua b/lua/user/plugins.lua index 18b1b45..13f7f5a 100644 --- a/lua/user/plugins.lua +++ b/lua/user/plugins.lua @@ -41,6 +41,7 @@ return packer.startup(function(use) use("nvim-lua/popup.nvim") use("nvim-lua/plenary.nvim") use("kyazdani42/nvim-web-devicons") + use("antoinemadec/FixCursorHold.nvim") -- Themes use("shaunsingh/nord.nvim") @@ -69,9 +70,9 @@ return packer.startup(function(use) use("ray-x/lsp_signature.nvim") -- use("github/copilot.vim") -- ENABLE ON FIRST TIME ONLY! use("zbirenbaum/copilot.lua") - - -- Trouble use("folke/trouble.nvim") + use("onsails/lspkind.nvim") + use("glepnir/lspsaga.nvim") -- Telescope use("nvim-telescope/telescope.nvim") @@ -126,9 +127,6 @@ return packer.startup(function(use) -- Colorizer use("norcalli/nvim-colorizer.lua") - -- Navic - use("SmiteshP/nvim-navic") - -- Wakatime use("wakatime/vim-wakatime") diff --git a/lua/user/winbar.lua b/lua/user/winbar.lua deleted file mode 100644 index 43ae000..0000000 --- a/lua/user/winbar.lua +++ /dev/null @@ -1,64 +0,0 @@ -local M = {} - -local navic = require("nvim-navic") - -local function get_buf_option(opt) - local status_ok, buf_option = pcall(vim.api.nvim_buf_get_option, 0, opt) - if not status_ok then - return nil - else - return buf_option - end -end - -local function is_empty(s) - return s == nil or s == "" -end - -M.winbar_filetype_exclude = { - "help", - "startify", - "dashboard", - "packer", - "neogitstatus", - "NvimTree", - "Trouble", - "alpha", - "lir", - "Outline", - "spectre_panel", - "toggleterm", -} - -local excludes = function() - if vim.tbl_contains(M.winbar_filetype_exclude, vim.bo.filetype) then - vim.opt_local.winbar = nil - return true - end - return false -end - -local function get_filename() - return "%#WinBarFilename#" .. "%t" .. "%*" -end - -local function get_location() - local location = navic.get_location() - if not is_empty(location) then - return "%#WinBarContext#" .. " " .. ">" .. " " .. location .. "%*" - end - return "" -end - -function M.get_winbar() - if excludes() then - return "" - end - if navic.is_available() then - return get_filename() .. get_location() - else - return get_filename() - end -end - -return M