Intro
Since I have now neovim 0.5 installed and know it can run faster with init.lua I started to gradually annotate and copying pieces of others [neo]vimmers to reproduce my old environment.
Aliases
-- aliases local execute = vim.api.nvim_command local vim = vim local opt = vim.opt -- global local g = vim.g -- global for let options local wo = vim.wo -- window local local bo = vim.bo -- buffer local local fn = vim.fn -- access vim functions local cmd = vim.cmd -- vim commands local api = vim.api -- access vim api A function to reaload vim (useful when you change your config)
-- https://neovim.discourse.group/t/reload-init-lua-and-all-require-d-scripts/971/11 function _G.ReloadConfig() local hls_status = vim.v.hlsearch for name,_ in pairs(package.loaded) do if name:match('^cnull') then package.loaded[name] = nil end end dofile(vim.env.MYVIMRC) if hls_status == 0 then vim.opt.hlsearch = false end end Mappings
It is cool having a mapper function in order to make things easier, so:
-- map helper local map = function(key) -- get the extra options local opts = {noremap = true} for i, v in pairs(key) do if type(i) == 'string' then opts[i] = v end end -- basic support for buffer-scoped keybindings local buffer = opts.buffer opts.buffer = nil if buffer then vim.api.nvim_buf_set_keymap(0, key[1], key[2], key[3], opts) else vim.api.nvim_set_keymap(key[1], key[2], key[3], opts) end end Once you have a mapper tool you can add mappings like these:
map{'n', '<space>', '/'} map{'n', '<F9>', ':update<cr>'} map{'n', '<leader>v', ':e $MYVIMRC<cr>'} map{'n', '<F4>', ':set invpaste paste?<cr>'} map{'i', '<S-insert>', '<C-r><C-o>+'} map{'n', 'n', 'nzz'} map{'n', 'N', 'Nzz'} map{'n', '<C-l>', ':set hls!<cr>'} -- line text-objects map{'v', 'al', ':<c-u>norm!0v$<cr>', {noremap = true, silent = true}} map{'v', 'il', ':<c-u>norm!_vg_<cr>', {noremap = true, silent = true}} map{'o', 'al', ':norm val<cr>', {noremap = true, silent = true}} map{'o', 'il', ':norm vil<cr>', {noremap = true, silent = true}} Some useful functions
First I have a global function called preserve, we can change some stuff in the file
without making the cursor jumping around.
-- -- https://bit.ly/3g6vYIW function _G.preserve(cmd) local cmd = string.format('keepjumps keeppatterns execute %q', cmd) local original_cursor = vim.fn.winsaveview() vim.api.nvim_command(cmd) vim.fn.winrestview(original_cursor) end Once you have this function you can reindent your file with a new command
vim.cmd([[command! Reindent lua preserve("sil keepj normal! gg=G")]]) In the ~/.config/nvim/lua I have a function to squeeze blank lines
M = {} M.squeeze_blank_lines = function() -- references: https://vi.stackexchange.com/posts/26304/revisions local old_query = vim.fn.getreg('/') -- save search register preserve('sil! 1,.s/^\\n\\{2,}/\\r/gn') -- set current search count number local result = vim.fn.searchcount({maxcount = 1000, timeout = 500}).current local line, col = unpack(vim.api.nvim_win_get_cursor(0)) preserve('sil! keepp keepj %s/^\\n\\{2,}/\\r/ge') preserve('sil! keepp keepj %s/\\v($\\n\\s*)+%$/\\r/e') vim.api.nvim_win_set_cursor({0}, {(line - result), col}) vim.fn.setreg('/', old_query) -- restore search register end return M Also in the tools.lua I have a function to change the file header, where we can read: "Last Change: ..."
--> :lua changeheader() -- This function is called with the BufWritePre event (autocmd) -- and when I want to save a file I use ":update" which -- only writes a buffer if it was modified M.changeheader = function() if (vim.fn.line('$') >= 7) then time = os.date("%a, %m %Y %H:%M") preserve('sil! keepp keepj 1,7s/\\vlast (modified|change):\\zs.*/ ' .. time .. '/ei') end end Here my autocommands:
-- autocommands -------- This function is taken from https://github.com/norcalli/nvim_utils function nvim_create_augroups(definitions) for group_name, definition in pairs(definitions) do api.nvim_command('augroup '..group_name) api.nvim_command('autocmd!') for _, def in ipairs(definition) do local command = table.concat(vim.tbl_flatten{'autocmd', def}, ' ') api.nvim_command(command) end api.nvim_command('augroup END') end end local autocmds = { reload_vimrc = { -- Reload vim config automatically -- {"BufWritePost",[[$VIM_PATH/{*.vim,*.yaml,vimrc} nested source $MYVIMRC | redraw]]}; {"BufWritePre", "$MYVIMRC", "lua ReloadConfig()"}; }; change_header = { {"BufWritePre", "*", "lua require('tools').changeheader()"} }; packer = { { "BufWritePost", "plugins.lua", "PackerCompile" }; }; terminal_job = { { "TermOpen", "*", [[tnoremap <buffer> <Esc> <c-\><c-n>]] }; { "TermOpen", "*", "startinsert" }; { "TermOpen", "*", "setlocal listchars= nonumber norelativenumber" }; }; restore_cursor = { { 'BufRead', '*', [[call setpos(".", getpos("'\""))]] }; }; save_shada = { {"VimLeave", "*", "wshada!"}; }; resize_windows_proportionally = { { "VimResized", "*", ":wincmd =" }; }; toggle_search_highlighting = { { "InsertEnter", "*", "setlocal nohlsearch" }; }; lua_highlight = { { "TextYankPost", "*", [[silent! lua vim.highlight.on_yank() {higroup="IncSearch", timeout=400}]] }; }; ansi_esc_log = { { "BufEnter", "*.log", ":AnsiEsc" }; }; } nvim_create_augroups(autocmds) -- autocommands END
Top comments (0)