local keymap = vim.keymap vim.g.mapleader = ',' vim.api.nvim_exec([[ " like tabdo but restore the current tab function! TabDo(command) let currTab=tabpagenr() execute 'tabdo ' . a:command execute 'tabn ' . currTab endfunction " like bufdo but restore the current buffer function! BufDo(command) let currBuff=bufnr("%") execute 'bufdo ' . a:command execute 'buffer ' . currBuff endfunction " like windo but restore the current window function! WinDo(command) let currwin=winnr() execute 'windo ' . a:command execute currwin . 'wincmd w' endfunction ]], true) keymap.set('n', 'c', [[:call TabDo('set cursorline!')]], {silent = true}) keymap.set('n', '/', [[:set invhlsearch]], {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', [[\]], ',', {silent = true}) keymap.set('v', [[\]], ',', {silent = true}) -- Select all keymap.set('n', '', 'ggG', {silent = true}) -- Scroll tabs keymap.set("n", '', ':tabnext', {silent = true}) keymap.set("n", '', ':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) create_autocmd = vim.api.nvim_create_autocmd create_autocmd("BufEnter", { pattern = '*', callback = func} ) end function create_func(ft, cmd) return function() if vim.bo.filetype == ft then cmd_string = string.format([[:tabnew %% :terminal %s %% :set nocursorline number norelativenumber G ]], cmd) keymap.set("n", "rr", cmd_string, {silent = true}) end end end create_autocmd_filetype(create_func('python', 'python3')) create_autocmd_filetype(create_func('go', 'go run')) create_autocmd_filetype(create_func('rust', 'cargo run')) -- Toggle line number style vim.opt.number = true vim.opt.relativenumber = true vim.api.nvim_exec([[ function! ToggleRelativeAbsoluteNumber() if !&number && !&relativenumber set number set norelativenumber elseif &number && !&relativenumber set nonumber set relativenumber elseif !&number && &relativenumber set number set relativenumber elseif &number && &relativenumber set nonumber set norelativenumber endif endfunction ]], true) -- Toggle line number style keymap.set('n', 'l', [[:call TabDo('call ToggleRelativeAbsoluteNumber()') ]], {silent = true})