feat(autocmd): enhance editor with improved cursor behavior and LSP integration
This commit is contained in:
1 file changed
+86
-7
+86
-7
@@ -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'),
|
||||
|
||||
Reference in new issue
Block a user