local opt = { noremap = true, silent = true } local keymap = vim.api.nvim_set_keymap -- TODO: Remove this keymap('n', '', 'Lazy profile', opt) -- resize {{{ keymap('n', '', 'resize -2', opt) keymap('n', '', 'resize +2', opt) keymap('n', '', 'vertical resize -2', opt) keymap('n', '', 'vertical resize -2', opt) -- }}} -- indent {{{ keymap('v', '<', '', '>gv', opt) -- }}} -- open/close folds with enter key {{{ keymap('n', '', "@=(foldlevel('.')?'za':\"\")", opt) -- }}} -- terminal {{{ keymap('n', '', 'ToggleTerm direction=horizontal', opt) keymap('t', '', 'ToggleTerm direction=horizontal', opt) keymap('v', '', 'ToggleTerm direction=horizontal', opt) keymap('i', '', 'ToggleTerm direction=horizontal', opt) keymap('n', '', 'ToggleTerm direction=float', opt) keymap('t', '', 'ToggleTerm direction=float', opt) keymap('v', '', 'ToggleTerm direction=float', opt) keymap('i', '', 'ToggleTerm direction=float', opt) -- }}} keymap('n', '', ':', { noremap = true }) keymap('n', ';', ':', { noremap = true }) keymap('n', 'rs', ':s///gI', { noremap = true }) keymap('n', 'rr', ':%s///gI', { noremap = true }) keymap('v', 'r', ':s///gI', { noremap = true }) keymap('n', 'D', '"_d', { noremap = true }) keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opt) keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opt) keymap('n', '', 'lua vim.lsp.buf.hover()', opt) keymap('n', 'gI', 'lua vim.lsp.buf.implementation()', opt) keymap('n', 'gl', 'lua vim.diagnostic.open_float()', opt) keymap('n', 'lf', 'lua vim.lsp.buf.format { async = true }', opt) keymap('n', 'li', 'LspInfo', opt) keymap('n', 'lI', 'LspInstallInfo', opt) keymap('n', 'la', 'lua vim.lsp.buf.code_action()', opt) keymap('n', 'lj', 'lua vim.diagnostic.goto_next({buffer=0})', opt) keymap('n', 'lk', 'lua vim.diagnostic.goto_prev({buffer=0})', opt) keymap('n', 'lr', 'lua vim.lsp.buf.rename()', opt) keymap('n', 'ls', 'lua vim.lsp.buf.signature_help()', opt) keymap('n', 'lq', 'lua vim.diagnostic.setloclist()', opt) keymap('n', 'e', 'lua vim.diagnostic.open_float()', opt) function MapDHM() keymap('n', 'i', 'l', { noremap = true }) keymap('n', 'n', 'j', { noremap = true }) keymap('n', 'e', 'k', { noremap = true }) keymap('v', 'l', 'i', { noremap = true }) keymap('v', 'i', 'l', { noremap = true }) keymap('v', 'n', 'j', { noremap = true }) keymap('v', 'e', 'k', { noremap = true }) keymap('n', 'l', 'i', { noremap = true }) keymap('n', 'N', 'J', { noremap = true }) keymap('n', 'j', 'n', { noremap = true }) keymap('n', 'J', 'N', { noremap = true }) keymap('n', '', 'I', { noremap = true }) end function UnMapDHM() vim.api.nvim_del_keymap('n', 'l') vim.api.nvim_del_keymap('n', 'j') vim.api.nvim_del_keymap('v', 'l') vim.api.nvim_del_keymap('v', 'j') vim.api.nvim_del_keymap('v', 'k') vim.api.nvim_del_keymap('n', 'i') vim.api.nvim_del_keymap('n', 'J') vim.api.nvim_del_keymap('n', 'n') vim.api.nvim_del_keymap('n', 'N') end local function file_exists(name) local f = io.open(name, "r") if f ~= nil then io.close(f) return true else return false end end if file_exists('/tmp/colemak') then MapDHM() end local wk = require 'which-key' -- which-key {{{ wk.setup { plugins = { marks = true, -- shows a list of your marks on ' and ` registers = true, -- shows your registers on " in NORMAL or in INSERT mode -- the presets plugin, adds help for a bunch of default keybindings in Neovim -- No actual key bindings are created presets = { operators = true, -- adds help for operators like d, y, ... motions = true, -- adds help for motions text_objects = false, -- help for text objects triggered after entering an operator windows = true, -- default bindings on nav = true, -- misc bindings to work with windows z = true, -- bindings for folds, spelling and others prefixed with z g = true, -- bindings for prefixed with g }, }, icons = { breadcrumb = '»', -- symbol used in the command line area that shows your active key combo separator = '➜ ', -- symbol used between a key and it's label group = '+', -- symbol prepended to a group }, window = { border = 'none', -- none, single, double, shadow position = 'bottom', -- bottom, top margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left] padding = { 1, 1, 1, 1 }, -- extra window padding [top, right, bottom, left] }, layout = { height = { min = 4, max = 25 }, -- min and max height of the columns width = { min = 20, max = 50 }, -- min and max width of the columns spacing = 3, -- spacing between columns }, hidden = { '', '', '', '', 'call', 'lua', '^:', '^ ' }, -- hide mapping boilerplate show_help = true, -- show help message on the command line when the popup is visible } local opts = { mode = 'n', -- NORMAL mode prefix = '', buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings silent = true, -- use `silent` when creating keymaps noremap = true, -- use `noremap` when creating keymaps nowait = false, -- use `nowait` when creating keymaps } vim.keymap.set('n', 'L', function() local win = vim.api.nvim_get_current_win() local qf_winid = vim.fn.getloclist(win, { winid = 0 }).winid local action = qf_winid > 0 and 'lclose' or 'lopen' vim.cmd(action) end, { noremap = true, silent = true }) vim.keymap.set('n', 'X', function() local qf_winid = vim.fn.getqflist({ winid = 0 }).winid local action = qf_winid > 0 and 'cclose' or 'copen' vim.cmd('botright ' .. action) end, { noremap = true, silent = true }) -- }}} -- leader mappings {{{ -- TODO create entire treesitter section local mappings = { [''] = { function() require('buffer_manager.ui').toggle_quick_menu() end, 'Buffers', }, ['.'] = { 'Oil', 'Oil' }, ['f'] = { 'e ~/.config/nvim/ ', 'Neovim config' }, ['rr'] = 'Search and replace all', ['rs'] = 'Search and replace', ['q'] = { 'lua UnMapDHM()', 'Qwerty' }, ['b'] = { function() require('buffer_manager.ui').toggle_quick_menu() end, 'List buffers', }, ['n'] = { function() require('buffer_manager.ui').nav_next() end, 'Next buffer', }, ['p'] = { function() require('buffer_manager.ui').nav_prev() end, 'Previous buffer', }, ['h'] = { 'TSBufToggle highlight', 'Enable TS highlight' }, ['1'] = { function() require('buffer_manager.ui').nav_file(1) end, 'Buffer 1', }, ['2'] = { function() require('buffer_manager.ui').nav_file(2) end, 'Buffer 2', }, ['3'] = { function() require('buffer_manager.ui').nav_file(3) end, 'Buffer 3', }, ['4'] = { function() require('buffer_manager.ui').nav_file(4) end, 'Buffer 4', }, ['5'] = { function() require('buffer_manager.ui').nav_file(5) end, 'Buffer 5', }, ['g'] = { 'Neogit', 'Neogit' }, l = { name = 'LSP', l = { 'Lazy load lsp LspStart ', 'Start LSP' }, f = { 'lua vim.lsp.buf.format { async = true }', 'Format' }, i = 'Lsp Info', a = 'Code action', j = 'Next diagnostic', k = 'Prev diagnostic', r = 'Rename', s = 'Signature Help', q = 'Set LocList', }, [''] = { name = 'Tab', n = { 'tabnew', 'New' }, p = { 'tabp', 'Previous' }, d = { 'tabclose', 'Close' }, [''] = { 'tabnext', 'Next' }, ['1'] = { '1gt', 'Go to tab 1' }, ['2'] = { '2gt', 'Go to tab 2' }, ['3'] = { '3gt', 'Go to tab 3' }, ['4'] = { '4gt', 'Go to tab 4' }, ['5'] = { '5gt', 'Go to tab 5' }, ['6'] = { '6gt', 'Go to tab 6' }, ['7'] = { '7gt', 'Go to tab 7' }, ['8'] = { '8gt', 'Go to tab 8' }, ['9'] = { '9gt', 'Go to tab 9' }, }, w = { name = 'Window', v = { 'v', 'Vertical split' }, h = { 's', 'Horizontal split' }, }, } -- }}} wk.register(mappings, opts)