local keymap = vim.keymap vim.g.mapleader = ',' function create_function_tabdo(command) return function() local curr_tab = vim.fn.tabpagenr() vim.cmd.tabdo(command) vim.cmd.tabn(curr_tab) end end -- Toggle line highlighting keymap.set('n', 'c', create_function_tabdo('set cursorline!'), {silent = true}) keymap.set('n', '/', function() vim.opt.hlsearch = not vim.opt.hlsearch["_value"] end, {silent = true}) keymap.set('i', 'jk', '', {silent = true}) keymap.set('i', 'ол', '', {silent = true}) -- x to blackhole keymap.set('n', 'x', '"_x', {silent = true}) -- Increment/decrement keymap.set('n', '+', '', {silent = true}) keymap.set('n', '-', '', {silent = true}) -- map \ to prev finding keymap.set({"n", "v"}, [[\]], ',', {silent = true}) -- Select all keymap.set('n', '', 'ggG', {silent = true}) -- Scroll tabs keymap.set("n", '', vim.cmd.tabnext, {silent = true}) keymap.set("n", '', vim.cmd.tabprev, {silent = true}) -- Kill current buffer keymap.set("n", 'qq', ':bd!', {silent = true}) -- Quick exit without saving keymap.set("n", 'qa', ':qa!', {silent = true}) keymap.set("n", 'eh', ':set list!', {silent = true}) vim.opt.listchars=[[tab:→\ ,eol:↵,trail:·,extends:↷,precedes:↶]] -- Tags panel (ctags required) keymap.set("n", 't', ':TagbarToggle', {silent = true}) -- Telescope keymap.set("n", 'ff', 'Telescope find_files', {silent = true}) keymap.set("n", 'fg', 'Telescope live_grep', {silent = true}) -- Expand %% to dirname of current file in command line keymap.set("c", '%%', [[getcmdtype() == ':' ? expand('%:h').'/' : '%%']], {expr = true}) -- Save from root vim.api.nvim_create_user_command('Sw', [[execute 'silent! write !SUDO_ASKPASS=$(which vim_askpass_helper) sudo -A tee % >/dev/null']], {}) function create_autocmd_filetype(func) local create_autocmd = vim.api.nvim_create_autocmd create_autocmd("BufEnter", { pattern = '*', callback = func} ) end function set_keymap_run_script(cmd) local cmd_string = string.format([[:tabnew %% :terminal %s %% :set nocursorline number norelativenumber G ]], cmd) keymap.set("n", "rr", cmd_string, {silent = true}) end function create_function_create_autocmd_filetype(ft, cmd) return function() if vim.bo.filetype == ft then set_keymap_run_script(cmd) end end end function create_function_create_autocmd_filename(fn, cmd) return function() if vim.fn.expand('%:t') == fn then set_keymap_run_script(cmd) end end end -- Run current file by type create_autocmd_filetype(create_function_create_autocmd_filetype('python', 'python3')) create_autocmd_filetype(create_function_create_autocmd_filetype('go', 'go run')) create_autocmd_filetype(create_function_create_autocmd_filetype('rust', 'cargo run')) create_autocmd_filetype(create_function_create_autocmd_filetype('markdown', 'glow')) create_autocmd_filetype(create_function_create_autocmd_filename('manpage', 'man -P cat -l')) -- Toggle line number style vim.opt.number = true vim.opt.relativenumber = true function toggle_number_style() local number = vim.opt.number["_value"] local relativenumber = vim.opt.relativenumber["_value"] if (not number) and (not relativenumber) then vim.opt.number = true vim.opt.relativenumber = false elseif (number) and (not relativenumber) then vim.opt.number = false vim.opt.relativenumber = true elseif (not number) and (relativenumber) then vim.opt.number = true vim.opt.relativenumber = true elseif (number) and (relativenumber) then vim.opt.number = false vim.opt.relativenumber = false end end -- Toggle line number style keymap.set('n', 'l', create_function_tabdo('lua toggle_number_style()'), {silent = true})