-- Taken from https://www.lazyvim.org/configuration/general local Util = require 'lazy.core.util' local function map(mode, lhs, rhs, opts) vim.keymap.set(mode, lhs, rhs, opts) end local function has(plugin) return require('lazy.core.config').plugins[plugin] ~= nil end -- better up/down map('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) map('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) -- Move to window using the <ctrl> hjkl keys map('n', '<C-h>', '<C-w>h', { desc = 'Go to left window' }) map('n', '<C-j>', '<C-w>j', { desc = 'Go to lower window' }) map('n', '<C-k>', '<C-w>k', { desc = 'Go to upper window' }) map('n', '<C-l>', '<C-w>l', { desc = 'Go to right window' }) -- Resize window using <ctrl> arrow keys map('n', '<C-Up>', '<cmd>resize +2<cr>', { desc = 'Increase window height' }) map('n', '<C-Down>', '<cmd>resize -2<cr>', { desc = 'Decrease window height' }) map('n', '<C-Left>', '<cmd>vertical resize -2<cr>', { desc = 'Decrease window width' }) map('n', '<C-Right>', '<cmd>vertical resize +2<cr>', { desc = 'Increase window width' }) -- Move Lines map('n', '<A-j>', '<cmd>m .+1<cr>==', { desc = 'Move down' }) map('n', '<A-k>', '<cmd>m .-2<cr>==', { desc = 'Move up' }) map('i', '<A-j>', '<esc><cmd>m .+1<cr>==gi', { desc = 'Move down' }) map('i', '<A-k>', '<esc><cmd>m .-2<cr>==gi', { desc = 'Move up' }) map('v', '<A-j>', ":m '>+1<cr>gv=gv", { desc = 'Move down' }) map('v', '<A-k>', ":m '<-2<cr>gv=gv", { desc = 'Move up' }) -- buffers if has 'bufferline.nvim' then map('n', '<S-h>', '<cmd>BufferLineCyclePrev<cr>', { desc = 'Prev buffer' }) map('n', '<S-l>', '<cmd>BufferLineCycleNext<cr>', { desc = 'Next buffer' }) map('n', '[b', '<cmd>BufferLineCyclePrev<cr>', { desc = 'Prev buffer' }) map('n', ']b', '<cmd>BufferLineCycleNext<cr>', { desc = 'Next buffer' }) else map('n', '<S-h>', '<cmd>bprevious<cr>', { desc = 'Prev buffer' }) map('n', '<S-l>', '<cmd>bnext<cr>', { desc = 'Next buffer' }) map('n', '[b', '<cmd>bprevious<cr>', { desc = 'Prev buffer' }) map('n', ']b', '<cmd>bnext<cr>', { desc = 'Next buffer' }) end map('n', '<leader>bb', '<cmd>e #<cr>', { desc = 'Switch to Other Buffer' }) map('n', '<leader>`', '<cmd>e #<cr>', { desc = 'Switch to Other Buffer' }) -- Clear search with <esc> map({ 'i', 'n' }, '<esc>', '<cmd>noh<cr><esc>', { desc = 'Escape and clear hlsearch' }) -- Clear search, diff update and redraw -- taken from runtime/lua/_editor.lua map('n', '<leader>ur', '<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>', { desc = 'Redraw / clear hlsearch / diff update' }) map({ 'n', 'x' }, 'gw', '*N', { desc = 'Search word under cursor' }) -- https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n map('n', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('x', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('o', 'n', "'Nn'[v:searchforward]", { expr = true, desc = 'Next search result' }) map('n', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) map('x', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) map('o', 'N', "'nN'[v:searchforward]", { expr = true, desc = 'Prev search result' }) -- Add undo break-points map('i', ',', ',<c-g>u') map('i', '.', '.<c-g>u') map('i', ';', ';<c-g>u') -- save file map({ 'i', 'v', 'n', 's' }, '<C-s>', '<cmd>w<cr><esc>', { desc = 'Save file' }) -- better indenting map('v', '<', '<gv') map('v', '>', '>gv') -- lazy map('n', '<leader>l', '<cmd>:Lazy<cr>', { desc = 'Lazy' }) -- new file map('n', '<leader>fn', '<cmd>enew<cr>', { desc = 'New File' }) map('n', '<leader>xl', '<cmd>lopen<cr>', { desc = 'Location List' }) map('n', '<leader>xq', '<cmd>copen<cr>', { desc = 'Quickfix List' }) if not has 'trouble.nvim' then map('n', '[q', vim.cmd.cprev, { desc = 'Previous quickfix' }) map('n', ']q', vim.cmd.cnext, { desc = 'Next quickfix' }) end -- stylua: ignore start -- toggle options -- map("n", "<leader>uf", require("lazyvim.plugins.lsp.format").toggle, { desc = "Toggle format on Save" }) map("n", "<leader>us", function() Util.toggle("spell") end, { desc = "Toggle Spelling" }) map("n", "<leader>uw", function() Util.toggle("wrap") end, { desc = "Toggle Word Wrap" }) map("n", "<leader>ul", function() Util.toggle("relativenumber", true) Util.toggle("number") end, { desc = "Toggle Line Numbers" }) -- map("n", "<leader>ud", Util.toggle_diagnostics, { desc = "Toggle Diagnostics" }) local conceallevel = vim.o.conceallevel > 0 and vim.o.conceallevel or 3 map("n", "<leader>uc", function() Util.toggle("conceallevel", false, { 0, conceallevel }) end, { desc = "Toggle Conceal" }) -- lazygit map("n", "<leader>gg", function() Util.float_term({ "lazygit" }, { cwd = Util.get_root() }) end, { desc = "Lazygit (root dir)" }) map("n", "<leader>gG", function() Util.float_term({ "lazygit" }) end, { desc = "Lazygit (cwd)" }) -- quit map("n", "<leader>qq", "<cmd>qa<cr>", { desc = "Quit all" }) -- highlights under cursor -- if vim.fn.has("nvim-0.9.0") == 1 then -- map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" }) -- end -- floating terminal map("n", "<leader>ft", function() Util.float_term(nil, { cwd = Util.get_root() }) end, { desc = "Terminal (root dir)" }) map("n", "<leader>fT", function() Util.float_term() end, { desc = "Terminal (cwd)" }) map("t", "<esc><esc>", "<c-\\><c-n>", { desc = "Enter Normal Mode" }) -- windows map("n", "<leader>ww", "<C-W>p", { desc = "Other window" }) map("n", "<leader>wd", "<C-W>c", { desc = "Delete window" }) map("n", "<leader>w-", "<C-W>s", { desc = "Split window below" }) map("n", "<leader>w|", "<C-W>v", { desc = "Split window right" }) map("n", "<leader>-", "<C-W>s", { desc = "Split window below" }) map("n", "<leader>|", "<C-W>v", { desc = "Split window right" }) -- tabs map("n", "<leader><tab>l", "<cmd>tablast<cr>", { desc = "Last Tab" }) map("n", "<leader><tab>f", "<cmd>tabfirst<cr>", { desc = "First Tab" }) map("n", "<leader><tab><tab>", "<cmd>tabnew<cr>", { desc = "New Tab" }) map("n", "<leader><tab>]", "<cmd>tabnext<cr>", { desc = "Next Tab" }) map("n", "<leader><tab>d", "<cmd>tabclose<cr>", { desc = "Close Tab" }) map("n", "<leader><tab>[", "<cmd>tabprevious<cr>", { desc = "Previous Tab" }) return {}