feat(autocmd): enhance editor with improved cursor behavior and LSP integration

This commit is contained in:
sankalp committed 2025-11-08 21:03:54 +05:45
1 parent c29c234bbc
commit 12329d4e90
1 file changed
+86 -7
+86 -7
View File
@@ -21,7 +21,7 @@ vim.api.nvim_create_autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, {
vim.api.nvim_create_autocmd('TextYankPost', {
group = augroup('highlight_yank'),
callback = function()
vim.highlight.on_yank()
vim.highlight.on_yank({ timeout = 200, visual = true })
end,
})
@@ -34,17 +34,96 @@ vim.api.nvim_create_autocmd({ 'VimResized' }, {
})
-- go to last loc when opening a buffer
-- vim.api.nvim_create_autocmd('BufReadPost', {
-- group = augroup('last_loc'),
-- callback = function()
-- local mark = vim.api.nvim_buf_get_mark(0, '"')
-- local lcount = vim.api.nvim_buf_line_count(0)
-- if mark[1] > 0 and mark[1] <= lcount then
-- pcall(vim.api.nvim_win_set_cursor, 0, mark)
-- end
-- end,
-- })
-- restore cursor to file position in previous editing session
vim.api.nvim_create_autocmd('BufReadPost', {
group = augroup('last_loc'),
callback = function()
local mark = vim.api.nvim_buf_get_mark(0, '"')
local lcount = vim.api.nvim_buf_line_count(0)
if mark[1] > 0 and mark[1] <= lcount then
pcall(vim.api.nvim_win_set_cursor, 0, mark)
callback = function(args)
local mark = vim.api.nvim_buf_get_mark(args.buf, '"')
local line_count = vim.api.nvim_buf_line_count(args.buf)
if mark[1] > 0 and mark[1] <= line_count then
vim.api.nvim_win_set_cursor(0, mark)
-- defer centering slightly so it's applied after render
vim.schedule(function()
vim.cmd('normal! zz')
end)
end
end,
})
-- open help in vertical split
vim.api.nvim_create_autocmd('FileType', {
pattern = 'help',
command = 'wincmd L',
})
-- no auto continue comments on new line
vim.api.nvim_create_autocmd('FileType', {
group = vim.api.nvim_create_augroup('no_auto_comment', {}),
callback = function()
vim.opt_local.formatoptions:remove({ 'c', 'r', 'o' })
end,
})
-- show cursorline only in active window enable
vim.api.nvim_create_autocmd({ 'WinEnter', 'BufEnter' }, {
group = vim.api.nvim_create_augroup('active_cursorline', { clear = true }),
callback = function()
vim.opt_local.cursorline = true
end,
})
-- show cursorline only in active window disable
vim.api.nvim_create_autocmd({ 'WinLeave', 'BufLeave' }, {
group = 'active_cursorline',
callback = function()
vim.opt_local.cursorline = false
end,
})
-- ide like highlight when stopping cursor
vim.api.nvim_create_autocmd('CursorMoved', {
group = vim.api.nvim_create_augroup('LspReferenceHighlight', { clear = true }),
desc = 'Highlight references under cursor',
callback = function()
-- Only run if the cursor is not in insert mode
if vim.fn.mode() ~= 'i' then
local clients = vim.lsp.get_clients({ bufnr = 0 })
local supports_highlight = false
for _, client in ipairs(clients) do
if client.server_capabilities.documentHighlightProvider then
supports_highlight = true
break -- Found a supporting client, no need to check others
end
end
-- 3. Proceed only if an LSP is active AND supports the feature
if supports_highlight then
vim.lsp.buf.clear_references()
vim.lsp.buf.document_highlight()
end
end
end,
})
-- ide like highlight when stopping cursor
vim.api.nvim_create_autocmd('CursorMovedI', {
group = 'LspReferenceHighlight',
desc = 'Clear highlights when entering insert mode',
callback = function()
vim.lsp.buf.clear_references()
end,
})
-- close some filetypes with <q>
vim.api.nvim_create_autocmd('FileType', {
group = augroup('close_with_q'),