local autocmd = vim.api.nvim_create_autocmd local augroup = vim.api.nvim_create_augroup local CrentistGroup = augroup('Crentist', {}) local OnSaveGroup = augroup('CrentistOnSave', {}) 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() vim.lsp.buf.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.goto_next() end, opts) vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() 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, })