diff options
Diffstat (limited to 'config/nvim/lua/keymaps.lua')
| -rw-r--r-- | config/nvim/lua/keymaps.lua | 457 |
1 files changed, 36 insertions, 421 deletions
diff --git a/config/nvim/lua/keymaps.lua b/config/nvim/lua/keymaps.lua index 0597937..d4ca130 100644 --- a/config/nvim/lua/keymaps.lua +++ b/config/nvim/lua/keymaps.lua @@ -1,424 +1,39 @@ -local kmap = vim.keymap.set - -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)" }, - }, - - -- ========== ВИЗУАЛЬНЫЙ РЕЖИМ ========== - { - "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" }, - }, - - -- ========== УПРАВЛЕНИЕ БУФЕРАМИ ========== - { - "<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" }, - }, - - -- ========== УПРАВЛЕНИЕ ВКЛАДКАМИ ========== - { - "<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" }, - }, - - -- ========== 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 (ЯЗЫКОВОЙ СЕРВЕР) ========== - { - "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" }, - }, - - -- ========== ИЗМЕНЕНИЕ РАЗМЕРА ОКОН ========== - { - "<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" }, - }, - - -- ========== 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" }, - }, - { - "<leader>dt", - function() - require("dap-go").debug_test() - end, - { desc = "Debug test" }, - }, - { - "<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" }, - }, - - -- ========== ФОРМАТИРОВАНИЕ ========== - { - "<leader>mp", - function() - require("conform").format({ lsp_fallback = true, async = false, timeout_ms = 500 }) - end, - { desc = "Format file or range (in visual mode)" }, - }, -} - --- Добавляем быстрый переход по вкладкам (1-9) +-- ========== БАЗОВАЯ НАВИГАЦИЯ ========== +vim.keymap.set("n", "<Space>", "<Nop>", { desc = "Disable Space in normal mode" }) +vim.keymap.set("n", "<Home>", "^", { desc = "Go to first non-blank character" }) +vim.keymap.set("n", "<End>", "$", { desc = "Go to end of line" }) +vim.keymap.set("v", "<Home>", "^", { desc = "Go to first non-blank character (visual)" }) +vim.keymap.set("v", "<End>", "$", { desc = "Go to end of line (visual)" }) +vim.keymap.set("i", "<Home>", "<C-o>^", { desc = "Go to first non-blank character (insert)" }) +vim.keymap.set("i", "<End>", "<C-o>$", { desc = "Go to end of line (insert)" }) + +-- ========== ВИЗУАЛЬНЫЙ РЕЖИМ ========== +vim.keymap.set("v", "i", "<S-i>", { desc = "Select inner object" }) +vim.keymap.set("v", "a", "<S-a>", { desc = "Select around object" }) +vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selection down" }) +vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selection up" }) +vim.keymap.set("v", "<", "<gv", { desc = "Indent left and keep selection" }) +vim.keymap.set("v", ">", ">gv", { desc = "Indent right and keep selection" }) + +-- ========== УПРАВЛЕНИЕ БУФЕРАМИ ========== +vim.keymap.set("n", "<leader>bn", "<cmd>bnext<CR>", { desc = "Next buffer" }) +vim.keymap.set("n", "<leader>bp", "<cmd>bprevious<CR>", { desc = "Previous buffer" }) +vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" }) +vim.keymap.set("n", "<C-s>", "<cmd>wa<CR>", { desc = "Save all files" }) +vim.keymap.set("n", "<C-q>", "<cmd>q<CR>", { desc = "Exit" }) +vim.keymap.set("n", "<leader>vs", "<cmd>vsplit<CR>", { desc = "Vertical split" }) + +-- ========== УПРАВЛЕНИЕ ВКЛАДКАМИ ========== +vim.keymap.set("n", "<A-Right>", "<cmd>tabnext<CR>", { desc = "Next tab" }) +vim.keymap.set("n", "<A-Left>", "<cmd>tabprevious<CR>", { desc = "Previous tab" }) +vim.keymap.set("n", "<A-t>", "<cmd>tabnew<CR>", { desc = "New tab" }) +vim.keymap.set("n", "<A-w>", "<cmd>tabclose<CR>", { desc = "Close tab" }) + +-- ========== Quick tab navigation (1-9) ========== for i = 1, 9 do - table.insert(keys, { - "<A-" .. i .. ">", - "<cmd>tabn " .. i .. "<CR>", - { desc = "Go to tab " .. i }, - }) + vim.keymap.set("n", "<A-" .. i .. ">", "<cmd>tabn " .. i .. "<CR>", { desc = "Go to tab " .. i }) end --- Применяем все кеймапинги -for _, mapping in ipairs(keys) do - local key = mapping[1] - local action = mapping[2] - local opts = mapping[3] or {} - - -- Извлекаем режим или используем "n" по умолчанию - local mode = opts.mode or "n" - -- Удаляем mode из opts, так как он передается отдельно - opts.mode = nil - - -- Устанавливаем silent = true по умолчанию - if opts.silent == nil then - opts.silent = true - end - - kmap(mode, key, action, opts) -end +-- ========== MISCELLANEOUS ========== +vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature help" }) +vim.keymap.set("n", "<A-q>", "gqip", { desc = "Reflow line" }) |
