1 -- Simple winbar/statusline plugin that shows your current code context
2 -- https://github.com/SmiteshP/nvim-navic
3 vim.api.nvim_set_hl(0, "NavicIconsFile", { default = true, bg = "#000000", fg = "#977D9E" })
4 vim.api.nvim_set_hl(0, "NavicIconsModule", { default = true, bg = "#000000", fg = "#977D9E" })
5 vim.api.nvim_set_hl(0, "NavicIconsNamespace", { default = true, bg = "#000000", fg = "#977D9E" })
6 vim.api.nvim_set_hl(0, "NavicIconsPackage", { default = true, bg = "#000000", fg = "#977D9E" })
7 vim.api.nvim_set_hl(0, "NavicIconsClass", { default = true, bg = "#000000", fg = "#977D9E" })
8 vim.api.nvim_set_hl(0, "NavicIconsMethod", { default = true, bg = "#000000", fg = "#977D9E" })
9 vim.api.nvim_set_hl(0, "NavicIconsProperty", { default = true, bg = "#000000", fg = "#977D9E" })
10 vim.api.nvim_set_hl(0, "NavicIconsField", { default = true, bg = "#000000", fg = "#977D9E" })
11 vim.api.nvim_set_hl(0, "NavicIconsConstructor", { default = true, bg = "#000000", fg = "#977D9E" })
12 vim.api.nvim_set_hl(0, "NavicIconsEnum", { default = true, bg = "#000000", fg = "#977D9E" })
13 vim.api.nvim_set_hl(0, "NavicIconsInterface", { default = true, bg = "#000000", fg = "#977D9E" })
14 vim.api.nvim_set_hl(0, "NavicIconsFunction", { default = true, bg = "#000000", fg = "#977D9E" })
15 vim.api.nvim_set_hl(0, "NavicIconsVariable", { default = true, bg = "#000000", fg = "#977D9E" })
16 vim.api.nvim_set_hl(0, "NavicIconsConstant", { default = true, bg = "#000000", fg = "#977D9E" })
17 vim.api.nvim_set_hl(0, "NavicIconsString", { default = true, bg = "#000000", fg = "#977D9E" })
18 vim.api.nvim_set_hl(0, "NavicIconsNumber", { default = true, bg = "#000000", fg = "#977D9E" })
19 vim.api.nvim_set_hl(0, "NavicIconsBoolean", { default = true, bg = "#000000", fg = "#977D9E" })
20 vim.api.nvim_set_hl(0, "NavicIconsArray", { default = true, bg = "#000000", fg = "#977D9E" })
21 vim.api.nvim_set_hl(0, "NavicIconsObject", { default = true, bg = "#000000", fg = "#977D9E" })
22 vim.api.nvim_set_hl(0, "NavicIconsKey", { default = true, bg = "#000000", fg = "#977D9E" })
23 vim.api.nvim_set_hl(0, "NavicIconsNull", { default = true, bg = "#000000", fg = "#977D9E" })
24 vim.api.nvim_set_hl(0, "NavicIconsEnumMember", { default = true, bg = "#000000", fg = "#977D9E" })
25 vim.api.nvim_set_hl(0, "NavicIconsStruct", { default = true, bg = "#000000", fg = "#977D9E" })
26 vim.api.nvim_set_hl(0, "NavicIconsEvent", { default = true, bg = "#000000", fg = "#977D9E" })
27 vim.api.nvim_set_hl(0, "NavicIconsOperator", { default = true, bg = "#000000", fg = "#977D9E" })
28 vim.api.nvim_set_hl(0, "NavicIconsTypeParameter", { default = true, bg = "#000000", fg = "#977D9E" })
29 vim.api.nvim_set_hl(0, "NavicText", { default = true, bg = "#000000", fg = "#ffffff" })
30 vim.api.nvim_set_hl(0, "NavicSeparator", { default = true, bg = "#000000", fg = "#073642" })
31 local attach_keymaps = function(client, bufnr)
35 vim.lsp.buf.declaration,
36 { buffer = bufnr, noremap = true, silent = true, desc = "Go to declaration" }
41 vim.lsp.buf.definition,
42 { buffer = bufnr, noremap = true, silent = true, desc = "Go to definition" }
47 vim.lsp.buf.type_definition,
48 { buffer = bufnr, noremap = true, silent = true, desc = "Go to type" }
53 vim.lsp.buf.implementation,
54 { buffer = bufnr, noremap = true, silent = true, desc = "List implementations" }
59 vim.lsp.buf.references,
60 { buffer = bufnr, noremap = true, silent = true, desc = "List references" }
65 vim.diagnostic.goto_next,
66 { buffer = bufnr, noremap = true, silent = true, desc = "Go to next diagnostic" }
71 vim.diagnostic.goto_prev,
72 { buffer = bufnr, noremap = true, silent = true, desc = "Go to previous diagnostic" }
77 vim.diagnostic.open_float,
78 { buffer = bufnr, noremap = true, silent = true, desc = "Open diagnostic float" }
83 vim.lsp.buf.document_highlight,
84 { buffer = bufnr, noremap = true, silent = true, desc = "Document highlight" }
89 vim.lsp.buf.document_symbol,
90 { buffer = bufnr, noremap = true, silent = true, desc = "List document symbols" }
95 vim.lsp.buf.add_workspace_folder,
96 { buffer = bufnr, noremap = true, silent = true, desc = "Add workspace folder" }
101 vim.lsp.buf.remove_workspace_folder,
102 { buffer = bufnr, noremap = true, silent = true, desc = "Remove workspace folder" }
104 vim.keymap.set("n", "<leader>lwl", function()
105 vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders()))
106 end, { buffer = bufnr, noremap = true, silent = true, desc = "List workspace folders" })
110 vim.lsp.buf.workspace_symbol,
111 { buffer = bufnr, noremap = true, silent = true, desc = "List workspace symbols" }
117 { buffer = bufnr, noremap = true, silent = true, desc = "Trigger hover" }
122 vim.lsp.buf.signature_help,
123 { buffer = bufnr, noremap = true, silent = true, desc = "Signature help" }
129 { buffer = bufnr, noremap = true, silent = true, desc = "Rename symbol" }
134 vim.lsp.buf.code_action,
135 { buffer = bufnr, noremap = true, silent = true, desc = "Code action" }
141 { buffer = bufnr, noremap = true, silent = true, desc = "Format" }
143 vim.keymap.set("n", "<leader>ltf", function()
144 vim.b.disableFormatSave = not vim.b.disableFormatSave
145 end, { buffer = bufnr, noremap = true, silent = true, desc = "Toggle format on save" })
151 local navic = require("nvim-navic")
179 TypeParameter = " ",
188 depth_limit_indicator = "..",
190 lazy_update_context = true,
192 format_text = function(text)
196 local default_on_attach = function(client, bufnr)
197 attach_keymaps(client, bufnr)
198 -- let navic attach to buffers
199 if client.server_capabilities.documentSymbolProvider then
200 navic.attach(client, bufnr)
203 vim.api.nvim_create_autocmd("LspAttach", {
204 callback = function(event)
205 local bufnr = event.buf
206 local client = vim.lsp.get_client_by_id(event.data.client_id)
207 default_on_attach(client, bufnr)
209 desc = "Activate navic on LSP attach",
210 group = vim.api.nvim_create_augroup("navic-lsp-attach", { clear = true }),
212 -- Always show the winbar to avoid annoying scroll
213 -- when showing nvim-navic and when not.