From ab9378da69edb6fec97c0cb3f87bb02f83fc4b7f Mon Sep 17 00:00:00 2001 From: Brahmajit Das Date: Wed, 4 Jun 2025 03:14:27 +0530 Subject: moving autocmds from lua/autocmds to lua/config/autocmds Signed-off-by: Brahmajit Das --- lua/autocmds.lua | 67 -------------------------- lua/config/autocmds.lua | 123 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 67 deletions(-) delete mode 100644 lua/autocmds.lua create mode 100644 lua/config/autocmds.lua diff --git a/lua/autocmds.lua b/lua/autocmds.lua deleted file mode 100644 index de6b82a..0000000 --- a/lua/autocmds.lua +++ /dev/null @@ -1,67 +0,0 @@ -local function augroup(name) - return vim.api.nvim_create_augroup(name, { clear = true }) -end - --- Highlight on yank -vim.api.nvim_create_autocmd("TextYankPost", { - group = augroup("highlight_yank"), - callback = function() - vim.highlight.on_yank() - end, -}) - --- close some filetypes with -vim.api.nvim_create_autocmd("FileType", { - group = augroup("close_with_q"), - pattern = { - "diff", - "git", - "fugitive", - "PlenaryTestPopup", - "help", - "lspinfo", - "man", - "notify", - "qf", - "query", - "spectre_panel", - "startuptime", - "tsplayground", - "neotest-output", - "checkhealth", - "neotest-summary", - "neotest-output-panel", - }, - callback = function(event) - vim.bo[event.buf].buflisted = false - vim.keymap.set("n", "q", "close", { buffer = event.buf, silent = true }) - end, -}) - --- go to last loc when opening a buffer -vim.api.nvim_create_autocmd("BufReadPost", { - group = augroup("last_loc"), - callback = function(event) - local exclude = { "gitcommit" } - local buf = event.buf - if vim.tbl_contains(exclude, vim.bo[buf].filetype) or vim.b[buf].lazyvim_last_loc then - return - end - vim.b[buf].lazyvim_last_loc = true - local mark = vim.api.nvim_buf_get_mark(buf, '"') - local lcount = vim.api.nvim_buf_line_count(buf) - if mark[1] > 0 and mark[1] <= lcount then - pcall(vim.api.nvim_win_set_cursor, 0, mark) - end - end, -}) - -vim.api.nvim_create_autocmd({ "ColorScheme", "BufReadPost" }, { - pattern = { "*patch.diff" }, - callback = function() - vim.api.nvim_set_hl(0, "PRDiffAdd", { fg = "#232634", bg = "#a6da95" }) - vim.api.nvim_set_hl(0, "PRDiffDel", { fg = "#d7e3d8", bg = "#e82424" }) - vim.cmd.syntax([[match PRDiffAdd /\v^[\+]((\-\-)|(\@\@ )|(\+\+)|(index )|(diff ))@!.*/]]) - vim.cmd.syntax([[match PRDiffDel /\v^[\-]((\-\-)|(\@\@ )|(\+\+)|(index )|(diff ))@!.*/]]) - end, -}) diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua new file mode 100644 index 0000000..7efc2bf --- /dev/null +++ b/lua/config/autocmds.lua @@ -0,0 +1,123 @@ +local function augroup(name) + return vim.api.nvim_create_augroup(name, { clear = true }) +end + +-- Highlight on yank +vim.api.nvim_create_autocmd("TextYankPost", { + group = augroup("highlight_yank"), + callback = function() + vim.highlight.on_yank() + end, +}) + +-- close some filetypes with + vim.api.nvim_create_autocmd("FileType", { + group = augroup("close_with_q"), + pattern = { + "diff", + "git", + "fugitive", + "PlenaryTestPopup", + "help", + "lspinfo", + "man", + "notify", + "qf", + "query", + "spectre_panel", + "startuptime", + "tsplayground", + "neotest-output", + "checkhealth", + "neotest-summary", + "neotest-output-panel", + }, + callback = function(event) + vim.bo[event.buf].buflisted = false + vim.keymap.set("n", "q", "close", { buffer = event.buf, silent = true }) + end, +}) + +-- go to last loc when opening a buffer +vim.api.nvim_create_autocmd("BufReadPost", { + group = augroup("last_loc"), + callback = function(event) + local exclude = { "gitcommit" } + local buf = event.buf + if vim.tbl_contains(exclude, vim.bo[buf].filetype) or vim.b[buf].lazyvim_last_loc then + return + end + vim.b[buf].lazyvim_last_loc = true + local mark = vim.api.nvim_buf_get_mark(buf, '"') + local lcount = vim.api.nvim_buf_line_count(buf) + if mark[1] > 0 and mark[1] <= lcount then + pcall(vim.api.nvim_win_set_cursor, 0, mark) + end + end, +}) + +vim.api.nvim_create_autocmd({ "ColorScheme", "BufReadPost" }, { + pattern = { "*patch.diff" }, + callback = function() + vim.api.nvim_set_hl(0, "PRDiffAdd", { fg = "#232634", bg = "#a6da95" }) + vim.api.nvim_set_hl(0, "PRDiffDel", { fg = "#d7e3d8", bg = "#e82424" }) + vim.cmd.syntax([[match PRDiffAdd /\v^[\+]((\-\-)|(\@\@ )|(\+\+)|(index )|(diff ))@!.*/]]) + vim.cmd.syntax([[match PRDiffDel /\v^[\-]((\-\-)|(\@\@ )|(\+\+)|(index )|(diff ))@!.*/]]) + end, +}) + +vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup('lsp-attach', { clear = true }), + callback = function(event) + local map = function(keys, func, desc) + vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) + end + + -- defaults: + -- https://neovim.io/doc/user/news-0.11.html#_defaults + + map("gl", vim.diagnostic.open_float, "Open Diagnostic Float") + map("K", vim.lsp.buf.hover, "Hover Documentation") + map("gs", vim.lsp.buf.signature_help, "Signature Documentation") + map("gD", vim.lsp.buf.declaration, "Goto Declaration") + map("la", vim.lsp.buf.code_action, "Code Action") + map("lr", vim.lsp.buf.rename, "Rename all references") + map("lf", vim.lsp.buf.format, "Format") + map("v", "vsplit | lua vim.lsp.buf.definition()", "Goto Definition in Vertical Split") + + local function client_supports_method(client, method, bufnr) + if vim.fn.has 'nvim-0.11' == 1 then + return client:supports_method(method, bufnr) + else + return client.supports_method(method, { bufnr = bufnr }) + end + end + + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then + local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', { clear = false }) + + -- When cursor stops moving: Highlights all instances of the symbol under the cursor + -- When cursor moves: Clears the highlighting + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + -- When LSP detaches: Clears the highlighting + vim.api.nvim_create_autocmd('LspDetach', { + group = vim.api.nvim_create_augroup('lsp-detach', { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { group = 'lsp-highlight', buffer = event2.buf } + end, + }) + end + end, +}) -- cgit v1.2.3 From a0d54522045755812e81121a5bbf3f115bf76a5a Mon Sep 17 00:00:00 2001 From: Brahmajit Das Date: Wed, 4 Jun 2025 03:18:34 +0530 Subject: moving lsp config, removing lsp-config dependency (v.11.0+) and removing LspAttach from lsp config Signed-off-by: Brahmajit Das --- lua/plugins/lsp.lua | 133 ---------------------------------------------------- plugin/lsp.lua | 53 +++++++++++++++++++++ 2 files changed, 53 insertions(+), 133 deletions(-) delete mode 100644 lua/plugins/lsp.lua create mode 100644 plugin/lsp.lua diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua deleted file mode 100644 index 7a33ede..0000000 --- a/lua/plugins/lsp.lua +++ /dev/null @@ -1,133 +0,0 @@ -return { - { - "neovim/nvim-lspconfig", - event = { 'BufReadPre', 'BufNewFile' }, - config = function() - local lspconfig = require('lspconfig') - vim.lsp.config('lua_ls', { - on_init = function(client) - if client.workspace_folders then - local path = client.workspace_folders[1].name - if path ~= vim.fn.stdpath('config') and (vim.uv.fs_stat(path .. '/.luarc.json') or vim.uv.fs_stat(path .. '/.luarc.jsonc')) then - return - end - end - - client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { - runtime = { - -- Tell the language server which version of Lua you're using - -- (most likely LuaJIT in the case of Neovim) - version = 'LuaJIT' - }, - -- Make the server aware of Neovim runtime files - workspace = { - checkThirdParty = false, - library = { - vim.env.VIMRUNTIME - -- Depending on the usage, you might want to add additional paths here. - -- "${3rd}/luv/library" - -- "${3rd}/busted/library", - } - -- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189) - -- library = vim.api.nvim_get_runtime_file("", true) - } - }) - end, - settings = { - Lua = {} - } - }) - lspconfig.lua_ls.setup {} - - -- Use LspAttach autocommand to only map the following keys - -- after the language server attaches to the current buffer - vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('UserLspConfig', {}), - callback = function(ev) - -- Enable completion triggered by - vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' - - -- Buffer local mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions - local opts = { buffer = ev.buf } - vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) - vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) - vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) - vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) - vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) - vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) - vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) - vim.keymap.set('n', 'wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, opts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) - vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) - vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) - vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) - vim.keymap.set({ 'n', 'v' }, 'f', function() - vim.lsp.buf.format { async = true } - end, opts) - end, - }) - - local signs = { Error = "󰅚 ", Warn = " ", Hint = " ", Info = " " } - vim.diagnostic.config({ - signs = { - enable = true, - text = { - ["ERROR"] = signs.Error, - ["WARN"] = signs.Warn, - ["HINT"] = signs.Hint, - ["INFO"] = signs.Info, - }, - texthl = { - ["ERROR"] = "DiagnosticDefault", - ["WARN"] = "DiagnosticDefault", - ["HINT"] = "DiagnosticDefault", - ["INFO"] = "DiagnosticDefault", - }, - numhl = { - ["ERROR"] = "DiagnosticDefault", - ["WARN"] = "DiagnosticDefault", - ["HINT"] = "DiagnosticDefault", - ["INFO"] = "DiagnosticDefault", - }, - } - }) - - vim.o.updatetime = 250 - -- vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false, scope="cursor"})]] - -- vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})]] - vim.cmd [[autocmd! ColorScheme * highlight NormalFloat guibg=#4c4f69]] - vim.cmd [[autocmd! ColorScheme * highlight FloatBorder guifg=white guibg=#1f2335]] - - local border = { - { "╭", "FloatBorder" }, - { "─", "FloatBorder" }, - { "╮", "FloatBorder" }, - { "│", "FloatBorder" }, - { "╯", "FloatBorder" }, - { "─", "FloatBorder" }, - { "╰", "FloatBorder" }, - { "│", "FloatBorder" }, - } - - -- To instead override globally - local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview - function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) - opts = opts or {} - opts.border = opts.border or border - return orig_util_open_floating_preview(contents, syntax, opts, ...) - end - - --- In .nvim.lua of your project paste in this - --- - --- require'lspconfig'.clangd.setup{ - --- on_attach = require("plugins.lsp-config").on_attach, - --- cpabilities = require("plugins.lsp-config").cpabilities, - --- lsp_flags = require("plugins.lsp-config").lsp_flags, - --- cmd = {vim.fn.expand('~/esp/esp-clang/bin/clangd')} - --- } - end, - }, -} diff --git a/plugin/lsp.lua b/plugin/lsp.lua new file mode 100644 index 0000000..e1bae06 --- /dev/null +++ b/plugin/lsp.lua @@ -0,0 +1,53 @@ +vim.lsp.enable({ + "lua_ls" +}) + +local signs = { Error = "󰅚 ", Warn = " ", Hint = " ", Info = " " } +vim.diagnostic.config({ + signs = { + enable = true, + text = { + ["ERROR"] = signs.Error, + ["WARN"] = signs.Warn, + ["HINT"] = signs.Hint, + ["INFO"] = signs.Info, + }, + texthl = { + ["ERROR"] = "DiagnosticDefault", + ["WARN"] = "DiagnosticDefault", + ["HINT"] = "DiagnosticDefault", + ["INFO"] = "DiagnosticDefault", + }, + numhl = { + ["ERROR"] = "DiagnosticDefault", + ["WARN"] = "DiagnosticDefault", + ["HINT"] = "DiagnosticDefault", + ["INFO"] = "DiagnosticDefault", + }, + } +}) + +vim.o.updatetime = 250 +-- vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false, scope="cursor"}) +-- vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})]] +vim.cmd [[autocmd! ColorScheme * highlight NormalFloat guibg=#4c4f69]] +vim.cmd [[autocmd! ColorScheme * highlight FloatBorder guifg=white guibg=#1f2335]] + +local border = { + { "╭", "FloatBorder" }, + { "─", "FloatBorder" }, + { "╮", "FloatBorder" }, + { "│", "FloatBorder" }, + { "╯", "FloatBorder" }, + { "─", "FloatBorder" }, + { "╰", "FloatBorder" }, + { "│", "FloatBorder" }, +} + +-- To instead override globally +local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview +function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) + opts = opts or {} + opts.border = opts.border or border + return orig_util_open_floating_preview(contents, syntax, opts, ...) +end -- cgit v1.2.3