summaryrefslogtreecommitdiff
path: root/config/nvim/lua/keymaps.lua
diff options
context:
space:
mode:
Diffstat (limited to 'config/nvim/lua/keymaps.lua')
-rw-r--r--config/nvim/lua/keymaps.lua462
1 files changed, 401 insertions, 61 deletions
diff --git a/config/nvim/lua/keymaps.lua b/config/nvim/lua/keymaps.lua
index 76919a8..6f06bde 100644
--- a/config/nvim/lua/keymaps.lua
+++ b/config/nvim/lua/keymaps.lua
@@ -1,77 +1,417 @@
-local map = vim.api.nvim_set_keymap
local kmap = vim.keymap.set
--- Базовые настройки навигации --
-map("n", "<Space>", "<Nop>", { noremap = true, silent = true })
--- Навигация в начало/конец строки
-map("n", "<Home>", "^", { noremap = true, silent = true })
-map("n", "<End>", "$", { noremap = true, silent = true })
-map("v", "<Home>", "^", { noremap = true, silent = true })
-map("v", "<End>", "$", { noremap = true, silent = true })
-map("i", "<Home>", "<C-o>^", { noremap = true, silent = true })
-map("i", "<End>", "<C-o>$", { noremap = true, silent = true })
+local keys = {
+ -- ========== БАЗОВАЯ НАВИГАЦИЯ ==========
+ {
+ "<Space>",
+ "<Nop>",
+ { desc = "Disable Space in normal mode" },
+ },
+ {
+ "<Home>",
+ "^",
+ { desc = "Go to first non-blank character" },
+ },
+ {
+ "<End>",
+ "$",
+ { desc = "Go to end of line" },
+ },
+ {
+ "<Home>",
+ "^",
+ { mode = "v", desc = "Go to first non-blank character (visual)" },
+ },
+ {
+ "<End>",
+ "$",
+ { mode = "v", desc = "Go to end of line (visual)" },
+ },
+ {
+ "<Home>",
+ "<C-o>^",
+ { mode = "i", desc = "Go to first non-blank character (insert)" },
+ },
+ {
+ "<End>",
+ "<C-o>$",
+ { mode = "i", desc = "Go to end of line (insert)" },
+ },
--- Фикс для визуального режима
-map("v", "i", "<S-i>", { noremap = true, silent = true })
-map("v", "a", "<S-a>", { noremap = true, silent = true })
-map("v", "J", ":m '>+1<CR>gv=gv", { noremap = true, silent = true })
-map("v", "K", ":m '<-2<CR>gv=gv", { noremap = true, silent = true })
-map("v", "<", "<gv", { noremap = true, silent = true })
-map("v", ">", ">gv", { noremap = true, silent = true })
+ -- ========== ВИЗУАЛЬНЫЙ РЕЖИМ ==========
+ {
+ "i",
+ "<S-i>",
+ { mode = "v", desc = "Select inner object" },
+ },
+ {
+ "a",
+ "<S-a>",
+ { mode = "v", desc = "Select around object" },
+ },
+ {
+ "J",
+ ":m '>+1<CR>gv=gv",
+ { mode = "v", desc = "Move selection down" },
+ },
+ {
+ "K",
+ ":m '<-2<CR>gv=gv",
+ { mode = "v", desc = "Move selection up" },
+ },
+ {
+ "<",
+ "<gv",
+ { mode = "v", desc = "Indent left and keep selection" },
+ },
+ {
+ ">",
+ ">gv",
+ { mode = "v", desc = "Indent right and keep selection" },
+ },
--- {{{ Управление буферами --
-kmap("n", "<leader>bn", "<cmd>bnext<CR>", { noremap = true, silent = true, desc = "Next buffer" })
-kmap("n", "<leader>bp", "<cmd>bprevious<CR>", { noremap = true, silent = true, desc = "Previous buffer" })
-kmap("n", "<leader>bd", "<cmd>bdelete<CR>", { noremap = true, silent = true, desc = "Delete buffer" })
-kmap("n", "<C-s>", "<cmd>wa<CR>", { noremap = true, silent = true, desc = "Save all files" })
-kmap("n", "<leader>q", "<cmd>q<CR>", { noremap = true, silent = true, desc = "Exit" })
-kmap("n", "<leader>vs", "<cmd>vsplit<CR>", { noremap = true, silent = true, desc = "Vertical split" })
--- }}}
+ -- ========== УПРАВЛЕНИЕ БУФЕРАМИ ==========
+ {
+ "<leader>bn",
+ "<cmd>bnext<CR>",
+ { desc = "Next buffer" },
+ },
+ {
+ "<leader>bp",
+ "<cmd>bprevious<CR>",
+ { desc = "Previous buffer" },
+ },
+ {
+ "<leader>bd",
+ "<cmd>bdelete<CR>",
+ { desc = "Delete buffer" },
+ },
+ {
+ "<C-s>",
+ "<cmd>wa<CR>",
+ { desc = "Save all files" },
+ },
+ {
+ "<leader>q",
+ "<cmd>q<CR>",
+ { desc = "Exit" },
+ },
+ {
+ "<leader>vs",
+ "<cmd>vsplit<CR>",
+ { desc = "Vertical split" },
+ },
--- {{{ Управление вкладками --
-kmap("n", "<A-Right>", ":tabnext<CR>", { noremap = true, silent = true, desc = "Next tab" })
-kmap("n", "<A-Left>", ":tabprevious<CR>", { noremap = true, silent = true, desc = "Previous tab" })
-kmap("n", "<A-t>", ":tabnew<CR>", { noremap = true, silent = true, desc = "New tab" })
-kmap("n", "<A-w>", ":tabclose<CR>", { noremap = true, silent = true, desc = "Close tab" })
+ -- ========== УПРАВЛЕНИЕ ВКЛАДКАМИ ==========
+ {
+ "<A-Right>",
+ "<cmd>tabnext<CR>",
+ { desc = "Next tab" },
+ },
+ {
+ "<A-Left>",
+ "<cmd>tabprevious<CR>",
+ { desc = "Previous tab" },
+ },
+ {
+ "<A-t>",
+ "<cmd>tabnew<CR>",
+ { desc = "New tab" },
+ },
+ {
+ "<A-w>",
+ "<cmd>tabclose<CR>",
+ { desc = "Close tab" },
+ },
--- Быстрый переход по вкладкам --
-for i = 1, 9 do
- kmap("n", "<A-" .. i .. ">", ":tabn " .. i .. "<CR>", { noremap = true, silent = true, desc = "Go to tab " .. i })
-end
+ -- ========== NVIM-TREE (ФАЙЛОВЫЙ ЭКСПЛОРЕР) ==========
+ {
+ "<C-c>",
+ function()
+ local api = require("nvim-tree.api")
+ local global_cwd = vim.fn.getcwd(-1, -1)
+ api.tree.change_root(global_cwd)
+ end,
+ { desc = "Change tree root to CWD" },
+ },
+ {
+ "<F3>",
+ "<cmd>NvimTreeToggle<CR>",
+ { desc = "Toggle file tree" },
+ },
--- }}}
+ -- ========== TELESCOPE (ПОИСК) ==========
+ {
+ "<leader>ff",
+ "<cmd>Telescope find_files<CR>",
+ { desc = "Find files" },
+ },
+ {
+ "<leader>fg",
+ "<cmd>Telescope live_grep<CR>",
+ { desc = "Live grep" },
+ },
+ {
+ "<leader>fb",
+ "<cmd>Telescope current_buffer_fuzzy_find<CR>",
+ { desc = "Find in current buffer" },
+ },
+ {
+ "<F4>",
+ "<cmd>Telescope buffers<CR>",
+ { desc = "Find buffers" },
+ },
+ {
+ "<leader>gc",
+ "<cmd>Telescope git_commits<CR>",
+ { desc = "Git commits" },
+ },
+ {
+ "<leader>gs",
+ "<cmd>Telescope git_status<CR>",
+ { desc = "Git status" },
+ },
+ {
+ "<leader>ch",
+ "<cmd>Telescope commands_history<CR>",
+ { desc = "Commands history" },
+ },
+ {
+ "<leader>e",
+ "<cmd>Telescope diagnostics<CR>",
+ { desc = "Diagnostics" },
+ },
+ {
+ "gi",
+ "<cmd>Telescope lsp_implementations<CR>",
+ { desc = "LSP implementations" },
+ },
+ {
+ "gr",
+ "<cmd>Telescope lsp_references<CR>",
+ { desc = "LSP references" },
+ },
--- {{{ LSP функции
-kmap("n", "d[", vim.diagnostic.goto_prev, { noremap = true, silent = true, desc = "Previous diagnostic" })
-kmap("n", "d]", vim.diagnostic.goto_next, { noremap = true, silent = true, desc = "Next diagnostic" })
+ -- ========== LSP (ЯЗЫКОВОЙ СЕРВЕР) ==========
+ {
+ "d[",
+ vim.diagnostic.goto_prev,
+ { desc = "Previous diagnostic" },
+ },
+ {
+ "d]",
+ vim.diagnostic.goto_next,
+ { desc = "Next diagnostic" },
+ },
+ {
+ "gD",
+ vim.lsp.buf.declaration,
+ { desc = "Go to declaration" },
+ },
+ {
+ "gd",
+ vim.lsp.buf.definition,
+ { desc = "Go to definition" },
+ },
+ {
+ "K",
+ vim.lsp.buf.hover,
+ { desc = "Show documentation" },
+ },
+ {
+ "<C-k>",
+ vim.lsp.buf.signature_help,
+ { desc = "Signature help" },
+ },
+ {
+ "<leader>sad",
+ "<cmd>ApidocsOpen<cr>",
+ { desc = "Search Api Doc" },
+ },
+ {
+ "<leader>wa",
+ vim.lsp.buf.add_workspace_folder,
+ { desc = "Add workspace folder" },
+ },
+ {
+ "<leader>wr",
+ vim.lsp.buf.remove_workspace_folder,
+ { desc = "Remove workspace folder" },
+ },
+ {
+ "<leader>im",
+ function()
+ require("telescope").extensions.goimpl.goimpl({})
+ end,
+ { desc = "Generate stub for interface on a type for golang" },
+ },
+ {
+ "<leader>wl",
+ function()
+ print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
+ end,
+ { desc = "List workspace folders" },
+ },
+ {
+ "<A-CR>",
+ "<cmd>Lspsaga code_action<cr>",
+ { desc = "Code actions" },
+ },
+ {
+ "<F2>",
+ vim.lsp.buf.rename,
+ { desc = "Rename symbol" },
+ },
+ {
+ "<A-q>",
+ "gqip",
+ { desc = "Reflow line" },
+ },
-kmap("n", "gD", vim.lsp.buf.declaration, { noremap = true, silent = true, desc = "Go to declaration" })
-kmap("n", "gd", vim.lsp.buf.definition, { noremap = true, silent = true, desc = "Go to definition" })
-kmap("n", "K", vim.lsp.buf.hover, { noremap = true, silent = true, desc = "Show documentation" })
+ -- ========== ИЗМЕНЕНИЕ РАЗМЕРА ОКОН ==========
+ {
+ "<C-A-Left>",
+ function()
+ require("myplugins.resize").ResizeLeft()
+ end,
+ { desc = "Resize window left" },
+ },
+ {
+ "<C-A-Right>",
+ function()
+ require("myplugins.resize").ResizeRight()
+ end,
+ { desc = "Resize window right" },
+ },
+ {
+ "<C-A-Up>",
+ function()
+ require("myplugins.resize").ResizeUp()
+ end,
+ { desc = "Resize window up" },
+ },
+ {
+ "<C-A-Down>",
+ function()
+ require("myplugins.resize").ResizeDown()
+ end,
+ { desc = "Resize window down" },
+ },
-kmap("n", "<C-k>", vim.lsp.buf.signature_help, { noremap = true, silent = true, desc = "Signature help" })
+ -- ========== DAP (ОТЛАДКА) ==========
+ {
+ "<F6>",
+ function()
+ require("dapui").toggle()
+ end,
+ { desc = "Toggle debug UI" },
+ },
+ {
+ "<Leader>dh",
+ function()
+ require("dap.ui.widgets").hover()
+ end,
+ { desc = "Debug hover" },
+ },
+ {
+ "<Leader>dp",
+ function()
+ require("dap.ui.widgets").preview()
+ end,
+ { desc = "Debug preview" },
+ },
+ {
+ "<F9>",
+ function()
+ local widgets = require("dap.ui.widgets")
+ widgets.centered_float(widgets.scopes)
+ end,
+ { desc = "Debug scopes" },
+ },
+ {
+ "<F5>",
+ function()
+ require("dap").continue()
+ end,
+ { desc = "Debug continue" },
+ },
+ {
+ "<F17>",
+ function() -- S-F5
+ require("dap").restart()
+ end,
+ { desc = "Debug restart" },
+ },
+ {
+ "<F29>",
+ function() -- C-F5
+ require("dap").terminate()
+ end,
+ { desc = "Debug terminate" },
+ },
+ {
+ "<F8>",
+ function()
+ require("dap").step_over()
+ end,
+ { desc = "Debug step over" },
+ },
+ {
+ "<F7>",
+ function()
+ require("dap").step_into()
+ end,
+ { desc = "Debug step into" },
+ },
+ {
+ "<F19>",
+ function() -- S-F7
+ require("dap").step_out()
+ end,
+ { desc = "Debug step out" },
+ },
+ {
+ "<A-b>",
+ function()
+ require("dap").toggle_breakpoint()
+ end,
+ { desc = "Toggle breakpoint" },
+ },
-kmap(
- "n",
- "<leader>wa",
- vim.lsp.buf.add_workspace_folder,
- { noremap = true, silent = true, desc = "Add workspace folder" }
-)
+ -- ========== ФОРМАТИРОВАНИЕ ==========
+ {
+ "<leader>mp",
+ function()
+ require("conform").format({ lsp_fallback = true, async = false, timeout_ms = 500 })
+ end,
+ { desc = "Format file or range (in visual mode)" },
+ },
+}
-kmap(
- "n",
- "<leader>wr",
- vim.lsp.buf.remove_workspace_folder,
- { noremap = true, silent = true, desc = "Remove workspace folder" }
-)
+-- Добавляем быстрый переход по вкладкам (1-9)
+for i = 1, 9 do
+ table.insert(keys, {
+ "<A-" .. i .. ">",
+ "<cmd>tabn " .. i .. "<CR>",
+ { desc = "Go to tab " .. i },
+ })
+end
-kmap("n", "<leader>wl", function()
- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
-end, { noremap = true, silent = true, desc = "List workspace folders" })
+-- Применяем все кеймапинги
+for _, mapping in ipairs(keys) do
+ local key = mapping[1]
+ local action = mapping[2]
+ local opts = mapping[3] or {}
---kmap("n", "<A-CR>", vim.lsp.buf.code_action, { noremap = true, silent = true, desc = "Code actions" })
-kmap("n", "<A-CR>", "<cmd>Lspsaga code_action<cr>", { noremap = true, silent = true, desc = "Code actions" })
+ -- Извлекаем режим или используем "n" по умолчанию
+ local mode = opts.mode or "n"
+ -- Удаляем mode из opts, так как он передается отдельно
+ opts.mode = nil
-kmap("n", "<F2>", vim.lsp.buf.rename, { noremap = true, silent = true, desc = "Rename symbol" })
+ -- Устанавливаем silent = true по умолчанию
+ if opts.silent == nil then
+ opts.silent = true
+ end
--- }}}
+ kmap(mode, key, action, opts)
+end