1
0
mirror of https://github.com/tiyn/dotfiles.git synced 2026-03-17 06:04:47 +01:00
Files
dotfiles/.config/nvim/lua/keymap.lua

403 lines
10 KiB
Lua

-- setup keymap function
local lazygit = require("FTerm"):new({ cmd = "lazygit" })
local telescope = require("telescope")
local wk = require("which-key")
wk.add({
-- setup keymap groups
{ mode = "n", "g", desc = "LSP: goto" },
{ mode = "n", "gp", desc = "LSP: preview" },
{ mode = "c", "w", desc = "Write" },
{ mode = "c", "w!", desc = "Write: overwrite" },
{ mode = "n", "<leader>a", desc = "AI" },
{ mode = "n", "<leader>g", desc = "Git" },
{ mode = "n", "<leader>f", desc = "Telescope: find" },
{ mode = "n", "<leader>gd", desc = "Git: diff" },
{ mode = "n", "<leader>s", desc = "Substitute" },
{ mode = "n", "<leader>t", desc = "Terminal" },
{ mode = "n", "<leader>r", desc = "Quarto" },
{ mode = "n", "<C-W>", desc = "Navigation" },
-- unmap unwanted commands
{ mode = "n", "Zt", "<NOP>", noremap = true },
{ mode = "n", "ZT", "<NOP>", noremap = true },
{ mode = "n", "<Space>", "<NOP>", noremap = true },
{ mode = "n", "<F1>", "<NOP>", noremap = true },
{ mode = "n", "<F2>", "<NOP>", noremap = true },
{ mode = "n", "<F3>", "<NOP>", noremap = true },
{ mode = "n", "<F4>", "<NOP>", noremap = true },
{ mode = "n", "<F5>", "<NOP>", noremap = true },
{ mode = "n", "<F6>", "<NOP>", noremap = true },
{ mode = "n", "<F7>", "<NOP>", noremap = true },
{ mode = "n", "<F8>", "<NOP>", noremap = true },
{ mode = "n", "<F9>", "<NOP>", noremap = true },
{ mode = "n", "<F10>", "<NOP>", noremap = true },
{ mode = "n", "<F11>", "<NOP>", noremap = true },
{ mode = "n", "<F12>", "<NOP>", noremap = true },
-- shortcuts for quitting
{ mode = "n", "ZA", ":xa<CR>", desc = "Exit: write and quit all buffers", noremap = true },
{ mode = "n", "ZQ", ":conf q<CR>", desc = "Exit: quit current buffer", noremap = true },
{ mode = "n", "ZZ", ":x<CR>", desc = "Exit: write and quit current buffer", noremap = true },
-- shortcut for split navigation
{ mode = "n", "<C-h>", "<C-w>h", desc = "Navigation: go to left window", noremap = true },
{ mode = "n", "<C-j>", "<C-w>j", desc = "Navigation: go to lower window", noremap = true },
{ mode = "n", "<C-k>", "<C-w>k", desc = "Navigation: go to upper window", noremap = true },
{ mode = "n", "<C-l>", "<C-w>l", desc = "Navigation: go to right window", noremap = true },
-- remap for dealing with word wrap
{ mode = "n", "j", "gj", desc = "Navigation: go down in wrapped lines", silent = true },
{ mode = "n", "k", "gk", desc = "Navigation: go up in wrapped lines", silent = true },
-- compiler for languages
{
mode = "n",
"<leader>c",
":w! | !compiler <c-r>%<CR>",
desc = "Compile: current file",
noremap = true,
},
{
mode = "n",
"w!!",
'execute "silent! write !sudo tee % >/dev/null" <bar> edit!',
desc = "Write: overwrite file over with sudo",
noremap = true,
},
-- tpope/vim-abolish
{
mode = "n",
"<leader>sa",
":%S//g<Left><Left>",
desc = "Substitute: free form",
noremap = true,
},
{
mode = "n",
"<leader>ss",
":%S/\\<<C-r><C-w>\\>//g<Left><Left>",
desc = "Substitute: word under cursor",
noremap = true,
},
-- simrat39/symbols-outline.nvim
{ mode = "n", "<F3>", ":Outline<CR>", desc = "CTags: toggle" },
-- nvim-tree/nvim-tree.lua
{ mode = "n", "<F2>", ":NvimTreeToggle toggle<CR>", desc = "File tree: toggle" },
-- mbbill/undotree
{ mode = "n", "<F1>", ":UndotreeToggle<CR>", desc = "Undo tree: toggle" },
-- amrbashir/nvim-docs-view
{
mode = "n",
"go",
":DocsViewToggle<CR>",
desc = "LSP: toggle documentation window",
noremap = true,
},
-- numtostr/fterm.nvim
{ mode = "n", "<leader>tt", require("FTerm").toggle, desc = "Terminal: open", noremap = true },
{
mode = "n",
"<leader>gt",
function()
lazygit:toggle()
end,
desc = "Git: open lazygit",
noremap = true,
},
{
mode = "n",
"<leader>tg",
function()
lazygit:toggle()
end,
desc = "Terminal: open lazygit",
noremap = true,
},
-- sindrets/diffview.nvim
{ mode = "n", "<leader>gdo", ":DiffviewOpen<CR>", desc = "Git: open diff" },
{ mode = "n", "<leader>gdc", ":DiffviewClose<CR>", desc = "Git: close diff" },
-- folke/trouble.nvim
{ mode = "n", "<F4>", ":Trouble diagnostics toggle<CR>", desc = "LSP: toggle error list" },
-- hrsh7th/nvim-cmp
{
mode = "n",
"gd",
function()
vim.lsp.buf.definition()
end,
desc = "LSP: goto definition",
noremap = true,
},
{
mode = "n",
"gD",
function()
vim.lsp.buf.declaration()
end,
desc = "LSP: goto declaration",
noremap = true,
},
{
mode = "n",
"gT",
function()
vim.lsp.buf.type_definition()
end,
desc = "LSP: goto type definition",
noremap = true,
},
{
mode = "n",
"gi",
function()
vim.lsp.buf.implementation()
end,
desc = "LSP: list implementation",
noremap = true,
},
{
mode = "n",
"gr",
function()
vim.lsp.buf.references()
end,
desc = "LSP: list references",
noremap = true,
},
{ mode = "n", "K", vim.lsp.buf.hover(), desc = "LSP: show documentation", noremap = true },
{
mode = "n",
"<F8>",
function()
require("conform").format({ async = true, lsp_fallback = true })
end,
desc = "LSP: format",
noremap = true,
},
-- rmagatti/goto-preview
{
mode = "n",
"gpd",
function()
require("goto-preview").goto_preview_definition()
end,
desc = "LSP: preview definition",
noremap = true,
},
{
mode = "n",
"gpy",
function()
require("goto-preview").goto_preview_type_definition()
end,
desc = "LSP: preview type definition",
noremap = true,
},
{
mode = "n",
"gpi",
function()
require("goto-preview").goto_preview_implementation()
end,
desc = "LSP: list preview implementation",
noremap = true,
},
{
mode = "n",
"gpD",
function()
require("goto-preview").goto_preview_declaration()
end,
desc = "LSP: preview declaration",
noremap = true,
},
{
mode = "n",
"gpr",
function()
require("goto-preview").goto_preview_references()
end,
desc = "LSP: list preview references",
noremap = true,
},
{
mode = "n",
"gpc",
function()
require("goto-preview").close_all_win()
end,
desc = "LSP: close all preview windows",
noremap = true,
},
-- filipdutescu/renamer.nvim
{
mode = "n",
"<F5>",
function()
require("renamer").rename()
end,
desc = "LSP: rename",
noremap = true,
},
-- nvim-telescope/telescope.nvim
{
mode = "n",
"<leader>ff",
":Telescope find_files<CR>",
desc = "Telescope: find files",
noremap = true,
},
{
mode = "n",
"<leader>ff",
":Telescope find_files<CR>",
desc = "Telescope: find files",
noremap = true,
},
-- archie-judd/telescope-words.nvim
{
mode = "n",
"<leader>wd",
telescope.extensions.telescope_words.search_dictionary,
desc = "Telescope: search dictionary",
noremap = true,
},
{
mode = "n",
"<leader>wt",
telescope.extensions.telescope_words.search_thesaurus,
desc = "Telescope: search thesaurus",
noremap = true,
},
-- gnikdroy/projections.nvim
{
mode = "n",
"<leader>fp",
function()
vim.cmd("Telescope projections")
end,
desc = "Telescope: find projects",
noremap = true,
},
-- kamykn/spelunker.vim
{
mode = "n",
"<F10>t",
":call spelunker#toggle()<CR>",
desc = "Spelunker: toggle spell check",
noremap = true,
},
{ mode = "n", "<F10>s", "z=", desc = "Spell: display suggestions" },
-- kevinhwang91/nvim-ufo
{
mode = "n",
"K",
function()
local winid = require("ufo").peekFoldedLinesUnderCursor()
if not winid then
vim.lsp.buf.hover()
end
end,
desc = "LSP: peek folded section",
noremap = true,
},
-- kevinhwang91/nvim-hlslens
{
mode = "n",
"n",
[[<Cmd>execute('normal! ' . v:count1 . 'n')<CR><Cmd>lua require('hlslens').start()<CR>]],
desc = "Search: search forward",
noremap = true,
silent = true,
},
{
mode = "n",
"N",
[[<Cmd>execute('normal! ' . v:count1 . 'N')<CR><Cmd>lua require('hlslens').start()<CR>]],
desc = "Search: search backwards",
noremap = true,
silent = true,
},
-- sindrets/winshift.nvim
{
mode = "n",
"<C-W>m",
":WinShift<CR>",
desc = "Navigation: enter window shift mode",
noremap = true,
},
-- ggandor/leap.nvim
{
mode = "n",
"f",
"<Plug>(leap-forward)",
desc = "Navigation: enter leap mode for forward movement",
noremap = true,
},
{
mode = "n",
"F",
"<Plug>(leap-backward)",
desc = "Navigation: enter leap mode for backwards movement",
noremap = true,
},
{
mode = "n",
"gf",
"<Plug>(leap-from-window)",
desc = "Navigation: enter leap mode for other windows",
noremap = true,
},
-- quarto-dev/quarto-nvim
{
mode = "n",
"<leader>rc",
require("quarto.runner").run_cell,
desc = "Quarto: Run cell",
noremap = true,
silent = true,
},
{
mode = "n",
"<leader>ra",
require("quarto.runner").run_above,
desc = "Quarto: Run cell and above",
noremap = true,
silent = true,
},
{
mode = "n",
"<leader>rA",
require("quarto.runner").run_all,
desc = "Quarto: Run all cells",
noremap = true,
silent = true,
},
{
mode = "n",
"<leader>rl",
require("quarto.runner").run_line,
desc = "Quarto: Run line",
noremap = true,
silent = true,
},
{
mode = "n",
"<leader>rr",
require("quarto.runner").run_range,
desc = "Quarto: Run visual range",
noremap = true,
silent = true,
},
{
mode = "n",
"<leader>rL",
function()
require("quarto.runner").run_all(true)
end,
desc = "Quarto: Run all cells of all languages",
noremap = true,
silent = true,
},
-- huynle/ogpt-nvim
{ mode = "n", "<leader>ai", ":OGPT<CR>", desc = "OGTP: Open AI View", noremap = true },
-- potamides/pantran.nvim
{ mode = {"n", "v"}, "<leader>tr", ":Pantran<CR>", desc = "Pantran: translate", noremap = true },
})