local autocmd = vim.api.nvim_create_autocmd local augroup = vim.api.nvim_create_augroup local CrentistGroup = augroup('Crentist', {}) local OnSaveGroup = augroup('CrentistOnSave', {}) local CrentistTreeSitter = augroup('CrentistTreeSitter', {}) local builtin = require('telescope.builtin') autocmd('LspAttach', { group = CrentistGroup, callback = function(e) local opts = { buffer = e.buf } vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "vrr", function() builtin.lsp_references() end, opts) vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) vim.keymap.set("n", "[d", function() vim.diagnostic.jump({ count = 1 }) end, opts) vim.keymap.set("n", "]d", function() vim.diagnostic.jump({ count = -1 }) end, opts) vim.keymap.set("n", "", function() vim.lsp.buf.format() end, opts) end }) -- Add new line to the end of the file autocmd({ 'BufWritePre' }, { group = OnSaveGroup, pattern = '*', callback = function() local n_lines = vim.api.nvim_buf_line_count(0) local last_nonblank = vim.fn.prevnonblank(n_lines) if last_nonblank <= n_lines then vim.api.nvim_buf_set_lines(0, last_nonblank, n_lines, true, { '' }) end end, }) -- Remove trailing spaces autocmd({ 'BufWritePre' }, { group = OnSaveGroup, pattern = { "*" }, callback = function() local save_cursor = vim.fn.winsaveview() pcall(function() vim.cmd [[%s/\s\+$//e]] end) vim.fn.winrestview(save_cursor) end, }) autocmd({ 'FileType' }, { group = CrentistGroup, pattern = { 'json' }, callback = function(e) vim.keymap.set("n", "", function() vim.cmd('silent %!jq .') end, { buffer = e.buf }) end }) autocmd({ 'FileType' }, { group = CrentistTreeSitter, pattern = { 'sh', 'javascript', 'typescript', 'python', 'go', 'terraform*', 'yaml', 'helm', 'tmux', 'lua', 'vim', 'vimdoc', 'latex', 'json', 'yaml*', 'git.+', 'make', 'markdown*', }, callback = function(e) vim.treesitter.start(e.buf) end })