nvim/lua/core/keymaps.lua

243 lines
9.7 KiB
Lua
Raw Normal View History

2025-02-14 01:48:45 -08:00
local map = vim.keymap.set
2025-02-14 17:34:12 -08:00
local Terminal = require("toggleterm.terminal").Terminal
local lazygit = Terminal:new({ cmd = "lazygit", hidden = true })
local ipython = Terminal:new({ cmd = "ipython", hidden = true })
local notify = require("notify")
2025-02-14 13:46:24 -08:00
local function term_factory(cfg)
2025-02-14 17:34:12 -08:00
cfg["on_stderr"] = function(_, job, data, name)
notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data)
end
cfg["on_stdout"] = function(_, job, data, name)
notify(name .. " output for job" .. job .. "\nData: " .. data)
end
return Terminal:new(cfg)
2025-02-14 13:46:24 -08:00
end
local function term_toggle(term)
2025-02-14 17:34:12 -08:00
term:toggle()
2025-02-14 13:46:24 -08:00
end
2025-02-14 01:48:45 -08:00
local opts = { silent = true, noremap = true }
2025-02-14 13:46:24 -08:00
local function ReloadConfig()
2025-02-14 17:34:12 -08:00
dofile(vim.fn.stdpath("config") .. "/init.lua")
dofile(vim.fn.stdpath("config") .. "/lua/core/keymaps.lua")
dofile(vim.fn.stdpath("config") .. "/lua/core/autocmds.lua")
dofile(vim.fn.stdpath("config") .. "/lua/core/options.lua")
dofile(vim.fn.stdpath("config") .. "/lua/core/plugins.lua")
dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/init.lua")
dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/toggleterm.lua")
dofile(vim.fn.stdpath("config") .. "/lua/plugins/ai/init.lua")
dofile(vim.fn.stdpath("config") .. "/lua/plugins/lsp/init.lua")
dofile(vim.fn.stdpath("config") .. "/lua/plugins/colorscheme/init.lua")
2025-02-14 13:46:24 -08:00
end
2025-02-14 01:48:45 -08:00
-- Leader key
vim.g.mapleader = " "
vim.g.maplocalleader = ","
-- Custom commands
2025-02-14 17:34:12 -08:00
vim.api.nvim_create_user_command("PS", ":PackerSync", {})
vim.api.nvim_create_user_command("Reload", ReloadConfig, {})
vim.api.nvim_create_user_command("Config", "edit ~/.config/nvim", {})
vim.api.nvim_create_user_command("Plugins", "edit ~/.config/nvim/lua/core/plugins.lua", {})
vim.api.nvim_create_user_command("Keymaps", "edit ~/.config/nvim/lua/core/keymaps.lua", {})
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
-- {{{ Basic mappings
2025-02-14 17:34:12 -08:00
map("n", "<C-u>", "<C-u>zz", opts)
map("n", "n", "nzzzv", opts)
map("n", "N", "Nzzzv", opts)
map("x", "<leader>p", '"_dP', opts) -- paste without yanking
map("v", "<", "<gv", opts) -- reselect after indent
map("v", ">", ">gv", opts)
map("v", "J", ":m '>+1<CR>gv=gv", opts) -- move lines
map("v", "K", ":m '<-2<CR>gv=gv", opts)
2025-02-14 13:46:24 -08:00
-- }}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
-- {{{ Buffer navigation
2025-02-14 17:34:12 -08:00
map("n", "<C-J>", ":bnext<CR>", opts)
map("n", "<C-K>", ":bprev<CR>", opts)
map("n", "<leader>bb", ":Telescope buffers<CR>", opts)
map("n", "<leader>bk", ":bdelete<CR>", opts)
map("n", "<leader>bn", ":bnext<CR>", opts)
map("n", "<leader>bp", ":bprev<CR>", opts)
2025-02-14 13:46:24 -08:00
-- }}}
--{{{ Terminal mappings
local programs_map = {
2025-02-14 17:34:12 -08:00
gg = { cmd = "lazygit", display_name = "lazygit", direction = "tab", hidden = true },
op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true },
oP = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true },
on = { cmd = "ncmpcpp", display_name = "ncmpcpp", direction = "tab", hidden = true },
ob = { cmd = "btop", display_name = "btop", direction = "tab", hidden = true },
od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true },
2025-02-14 13:46:24 -08:00
}
for key, value in pairs(programs_map) do
2025-02-14 17:34:12 -08:00
map("n", "<leader>" .. key, function()
term_toggle(term_factory(value))
end, opts)
2025-02-14 13:46:24 -08:00
end
2025-02-14 17:34:12 -08:00
map("v", "op", "<C-\\><C-N>:ToggleTerm name=ipython")
map("v", "oP", "<C-\\><C-N>:ToggleTerm name=ipython-full")
map("n", "<C-T>", ":ToggleTerm name=toggleterm<CR>", opts)
map("n", "<leader>tt", ":ToggleTerm name=toggleterm<CR>", opts)
2025-02-15 01:17:09 -08:00
map("n", "<leader>tT", ":ToggleTerm name=toggleterm-full direction=tab<CR>", opts)
2025-02-14 17:34:12 -08:00
map("n", "<leader>ts", ":TermSelect<CR>", opts)
map("n", "<leader>tv", ":ToggleTerm direction=vertical name=toggleterm-vert<CR>", opts)
map("n", "<leader>th", ":ToggleTerm direction=horizontal name=toggleterm-hori<CR>", opts)
map("n", "<leader>tf", ":ToggleTerm name=toggleterm<CR>", opts)
2025-02-15 01:17:09 -08:00
map("n", "<leader>-", "<C-\\><C-N>:ToggleTerm direction='horizontal'<CR>", opts)
map("n", "<leader>|", "<C-\\><C-N>:ToggleTerm direction='vertical'<CR>", opts)
-- map("t", "<leader>tt", "<C-\\><C-N>:ToggleTerm<CR>", opts)
-- map("t", "<leader>tf", "<C-\\><C-N>:ToggleTerm<CR>", opts)
-- map("t", "<leader>-", "<C-\\><C-N>:ToggleTerm direction='horizontal'<CR>", opts)
-- map("t", "<leader>|", "<C-\\><C-N>:ToggleTerm direction='vertical'<CR>", opts)
-- map("t", "<leader>tv", "<C-\\><C-N>:ToggleTerm --name=toggleterm-vert<CR>", opts)
-- map("t", "<leader>th", "<C-\\><C-N>:ToggleTerm --name=toggleterm-hori<CR>", opts)
-- map("t", "<C-T>", "<C-\\><C-n>:Toggleterm<CR>", opts)
-- map("t", "<Esc>", "<C-\\><C-n>", opts)
-- map("n", "<space>", "<nop>", opts) -- fix space in terminal
function _G.set_terminal_keymaps()
local opts = { buffer = 0 }
map("t", "<esc>", [[<C-\><C-n>]], opts)
map("t", "<C-w>", [[<C-\><C-n><C-w>]], opts)
-- map("t", "<space>", "<space>", { buffer = 0, silent = true }) -- fix space in terminal
end
2025-02-14 17:34:12 -08:00
2025-02-15 01:17:09 -08:00
-- if you only want these mappings for toggle term use term://*toggleterm#* instead
vim.cmd("autocmd! TermOpen term://* lua set_terminal_keymaps()")
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ LSP mappings
2025-02-14 17:34:12 -08:00
map("n", "gA", vim.lsp.buf.code_action, opts)
map("n", "gd", ":Telescope lsp_definitions<CR>", opts)
map("n", "gDc", ":Telescope lsp_implementations<CR>", opts)
map("n", "gDf", ":Telescope lsp_definitions<CR>", opts)
map("n", "gF", ":edit <cfile><CR>", opts)
map("n", "gT", ":Telescope lsp_type_definitions<CR>", opts)
map("n", "gb", ":Gitsigns blame_line<CR>", opts)
map("n", "gi", ":Telescope lsp_implementations<CR>", opts)
map("n", "gj", ":Telescope jumplist<CR>", opts)
map("n", "gl", vim.lsp.codelens.run, opts)
map("n", "gr", ":Telescope lsp_references<CR>", opts)
map("n", "gs", vim.lsp.buf.signature_help, opts)
map("n", "K", vim.lsp.buf.hover, opts)
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Code Companion and Copilot
2025-02-14 17:34:12 -08:00
map("n", "<leader>oc", ":CodeCompanionChat<CR>")
map("n", "<leader>cc", ":CodeCompanionChat<CR>", opts)
map("n", "<leader>ct", ":CodeCompanionChat Toggle<CR>", opts)
map("n", "<leader>ci", ":CodeCompanion ", opts)
map("n", "<leader>cp", ":vert Copilot panel<CR>", opts)
map("n", "<leader>Ca", ":CodeCompanionActions<CR>", opts)
map("v", "<leader>Cc", ":CodeCompanionChat Add<CR>", opts)
map("v", "<leader>Ce", ":CodeCompanion /explain<CR>", opts)
map("v", "<leader>Cf", ":CodeCompanion /fix<CR>", opts)
map("v", "<leader>Cl", ":CodeCompanion /lsp<CR>", opts)
map("v", "<leader>CT", ":CodeCompanion /tests<CR>", opts)
2025-02-14 13:46:24 -08:00
--}}}
--{{{ Diagnostics
-- nnoremap <leader>cd :Telescope diagnostics<CR>
-- nnoremap <leader>cDn :lua vim.diagnostic.goto_next()<CR>
-- nnoremap <leader>cDp :lua vim.diagnostic.goto_prev()<CR>
-- nnoremap <leader>cl :lua vim.diagnostic.setloclist()<CR>
2025-02-14 17:34:12 -08:00
map("n", "<leader>cd", ":Telescope diagnostics<CR>")
map("n", "<leader>cDn", ":lua vim.diagnostic.goto_next()<CR>")
map("n", "<leader>cDp", ":lua vim.diagnostic.goto_prev()<CR<CR>")
2025-02-15 01:17:09 -08:00
map("n", "<leader>cl", ":lua vim.diagnostic.setloclist()<CR>")
2025-02-14 13:46:24 -08:00
--}}}
--{{{ Telescope mappings
2025-02-14 17:34:12 -08:00
map("n", "//", ":Telescope current_buffer_fuzzy_find<CR>", opts)
map("n", "??", ":Telescope lsp_document_symbols<CR>", opts)
map(
"n",
"<leader>fc",
':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical<CR>',
opts
)
2025-02-14 13:46:24 -08:00
-- map('n', '<leader>ob', ':Telescope file_browser<CR>')
2025-02-14 17:34:12 -08:00
map("n", "<leader>ff", ":Telescope find_files<CR>", opts)
map("n", "<leader>sf", ":Telescope find_files<CR>", opts)
map("n", "<leader>fg", ":Telescope live_grep<CR>", opts)
map(
"n",
"<leader>fG",
':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical<CR>',
opts
)
map("n", "<leader>fb", ":Telescope file_browser<CR>", opts)
map("n", "<leader>fr", ":Telescope oldfiles<CR>", opts)
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Telescope Helper
2025-02-14 17:34:12 -08:00
map("n", "<leader>hc", ":Telescope commands<CR>")
map("n", "<leader>hv", ":Telescope vim_options<CR>")
map("n", "<leader>hk", ":Telescope keymaps<CR>")
map("n", "<leader>hs", ":Telescope spell_suggest<CR>")
map("n", "<leader>hm", ":Telescope man_pages<CR>")
2025-02-14 13:46:24 -08:00
--}}}
--{{{ Telescope Search
2025-02-14 17:34:12 -08:00
map("n", "<leader>sf", ":Telescope find_files<CR>")
map("n", "<leader>sg", ":Telescope live_grep<CR>")
map("n", "<leader>sh", ":Telescope command_history<CR>")
map("n", "<leader>sm", ":Telescope man_pages<CR>")
map("n", "<leader>s/", ":Telescope search_history<CR>")
2025-02-14 13:46:24 -08:00
--}}}
--}}}
--{{{ File explorer and tools
2025-02-14 17:34:12 -08:00
map("n", "<leader>n", ":NvimTreeToggle<CR>", opts)
map("n", "<leader>D", ":Dotenv .env<CR>", opts)
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Git mappings
2025-02-14 17:34:12 -08:00
map("n", "<leader>gc", ":Telescope git_commits<CR>", opts)
map("n", "<leader>gf", ":Telescope git_files<CR>", opts)
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Misc utilities
2025-02-14 17:34:12 -08:00
map("n", "<leader>x", "<cmd>!chmod +x %<CR>", opts)
map("n", "<leader>y", '"+', opts)
map("v", "<leader>y", '"+', opts)
map("n", "<leader>sc", ":nohls<CR>")
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Goto Preview
2025-02-14 17:34:12 -08:00
map("n", "gpc", ':lua require("goto-preview").close_all_win()<CR>')
map("n", "gpd", ':lua require("goto-preview").goto_preview_definition()<CR>')
map("n", "gpi", ':lua require("goto-preview").goto_preview_implementation()<CR>')
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ Workspace management
2025-02-14 17:34:12 -08:00
map("n", "<leader>wa", vim.lsp.buf.add_workspace_folder, opts)
map("n", "<leader>wr", vim.lsp.buf.remove_workspace_folder, opts)
map("n", "<leader>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
2025-02-14 01:48:45 -08:00
end, opts)
2025-02-14 13:46:24 -08:00
--}}}
2025-02-14 01:48:45 -08:00
2025-02-14 13:46:24 -08:00
--{{{ LSP
2025-02-14 17:34:12 -08:00
map("n", "<leader>ld", ":Telescope lsp_definitions<CR>")
map("n", "<leader>lD", ":Telescope diagnostic<CR>")
2025-02-15 01:17:09 -08:00
map("n", "<leader>la", vim.lsp.buf.code_action)
2025-02-14 17:34:12 -08:00
map("n", "<leader>lci", ":Telescope lsp_incoming_calls<CR>")
map("n", "<leader>lco", ":Telescope lsp_outgoing_calls<CR>")
map("n", "<leader>lh", ":lua vim.lsp.buf.signature_help()<CR>")
map("n", "<leader>li", ":Telescope lsp_implementations<CR>")
map("n", "<leader>lr", ":Telescope lsp_references<CR>")
map("n", "<leader>lR", ":lua vim.lsp.buf.rename()<CR>")
map("n", "<leader>ls", ":Telescope lsp_document_symbols<CR>")
map("n", "<leader>lt", ":Telescope lsp_type_definitions<CR>")
map("n", "<leader>lw", ":Telescope lsp_dynamic_workspace_symbols<CR>")
2025-02-14 13:46:24 -08:00
--}}}