local function map(mode, bind, cmd, opts) opts = opts or {} opts['noremap'] = true opts['silent'] = true if type(bind) == 'table' then for i in pairs(bind) do vim.keymap.set(mode, bind[i], cmd, opts) end elseif type(bind) == 'string' then vim.keymap.set(mode, bind, cmd, opts) else vim.notify('-- Invalid bind for keymap:\nvim.keymap.set(\'' .. mode .. '\', ' .. bind .. ', \'' .. cmd .. '\')', vim.log.levels.WARN, { title = 'Neovim Config', on_open = function(win) local buf = vim.api.nvim_win_get_buf(win) vim.api.nvim_buf_set_option(buf, "filetype", "lua") end } ) end end -- vim binds ------------------------------------------------------------------ g.mapleader = ' ' -- set leader key map('x', '<leader>p', [["_dP]], { desc = 'Greatest remap of all time.' }) map('n', '<esc>', ':nohlsearch<Bar>:echo<CR>', { desc = 'Clear search.' }) map('t', '<esc>', '<C-\\><C-n>', { desc = 'make <esc> work in terminals.' }) -- move selected text up/down map('v', '<S-k>', ":m '<-2<CR>gv=gv", { desc = 'Move selected text up.' }) map('v', '<S-j>', ":m '>+1<CR>gv=gv", { desc = 'Move selected text down.' }) -- the cursor STAYS IN THE MIDDLE map('n', '<S-j>', 'mzJ`z<cmd>delm z<CR>') -- when combining lines map('n', 'n', 'nzzzv') -- when searching map('n', 'N', 'Nzzzv') map('n', '<C-d>', '<C-d>zz') -- half page jumping map('n', '<C-u>', '<C-u>zz') map('n', '<leader>x', '<cmd>!chmod +x %<CR>') -- execute order 111 -- add some keybinds to the file view (netrw) a.nvim_create_autocmd('FileType', { pattern = 'netrw', callback = function() local bind = function(lhs, rhs) vim.keymap.set('n', lhs, rhs, { remap = true, buffer = true }) end bind('h', '-^') -- Go up a directory bind('l', '<CR>') -- Go down a directory / open a file bind('.', 'gh') -- Toggle dotfiles bind('P', '<C-w>z') -- Close preview window bind('<esc>', '<cmd>q<CR>') -- Close netrw end }) -- tabs map('n', '<C-q>n', '<cmd>tabnew<CR>') map('n', '<C-q>w', '<cmd>tabclose<CR>') map('n', '<C-q>h', '<cmd>tabprev<CR>') map('n', '<C-q>l', '<cmd>tabnext<CR>') -- plugin binds --------------------------------------------------------------- -- pretty lsp view map('n', 'gd', '<CMD>Glance definitions<CR>') map('n', 'gr', '<CMD>Glance references<CR>') map('n', 'gy', '<CMD>Glance type_definitions<CR>') map('n', 'gi', '<CMD>Glance implementations<CR>') if pcall(require, "treesj") then local treesj = require('treesj') -- treesj map('n', '<leader>j', treesj.toggle) end if pcall(require, "telescope") then local telebuilt = require('telescope.builtin') -- telescope map('n', '<leader>sf', telebuilt.find_files, { desc = 'Find files.' }) map('n', '<leader>sg', telebuilt.git_files, { desc = 'Find git files.' }) map('n', '<leader>sp', function() telebuilt.grep_string({ search = vim.fn.input( 'Find string in project > ' ) }) end, { desc = 'Find string in project.' }) map('n', '<leader>so', telebuilt.oldfiles, { desc = 'Find old files.' }) end map('n', '<leader>u', '<cmd>UndotreeToggle<CR>', { desc = 'Open undo tree.' }) map('n', '<leader>f', '<cmd>SFMToggle<CR>', { desc = 'Open file tree view.' }) map('n', '<leader>b', '<cmd>JABSOpen<CR>', { desc = 'Switch between buffers.' }) map('n', '<leader>tt', '<cmd>TroubleToggle<CR>', { desc = 'Diagnostic list.' }) map('n', '<leader>tc', '<cmd>TodoTrouble<CR>', { desc = 'Comment list.' }) map('n', '<C-e>', '<cmd>IconPickerYank<CR>', { desc = 'Icon picker list.' }) if pcall(require, "dapui") then local dapui = require('dapui') -- dap ui map('n', '<leader>d', dapui.toggle, { desc = 'Debuging ui.' }) end if pcall(require, "smart-splits") then local smartsplits = require('smart-splits') -- resizing buffers (toggleable) map('n', '<leader>r', smartsplits.start_resize_mode) end -- toggle term (don't use leader key in these binds) map({'n', 't'}, '<C-\\>', '<cmd>ToggleTerm direction=float<CR>') map({'n', 't'}, '<C-g>', '<cmd>lua _glow()<CR>') -- true zen if pcall(require, "true-zen") then map('n', '<leader>zf', require("true-zen.focus").toggle, { desc = 'fullscreen', }) map('n', '<leader>zm', require("true-zen.minimalist").toggle, { desc = 'minimal', }) map('n', '<leader>za', require("true-zen.ataraxis").toggle, { desc = 'zen', }) end -- Git map('n', '<leader>gph', '<cmd>Gitsigns preview_hunk_inline<CR>') map('n', '<leader>gsh', '<cmd>Gitsigns stage_hunk<CR>') map('n', '<leader>gb', '<cmd>Gitsigns blame_line<CR>') -- neogen if pcall(require, "neogen") then map('n', '<leader>df', require("neogen").generate, { desc = 'Generate anootations', }) end