local map = vim.api.nvim_set_keymap local kmap = vim.keymap.set -- Базовые настройки навигации -- map("n", "", "", { noremap = true, silent = true }) -- Навигация в начало/конец строки map("n", "", "^", { noremap = true, silent = true }) map("n", "", "$", { noremap = true, silent = true }) map("v", "", "^", { noremap = true, silent = true }) map("v", "", "$", { noremap = true, silent = true }) map("i", "", "^", { noremap = true, silent = true }) map("i", "", "$", { noremap = true, silent = true }) -- Фикс для визуального режима map("v", "i", "", { noremap = true, silent = true }) map("v", "a", "", { noremap = true, silent = true }) map("v", "J", ":m '>+1gv=gv", { noremap = true, silent = true }) map("v", "K", ":m '<-2gv=gv", { noremap = true, silent = true }) map("v", "<", "", ">gv", { noremap = true, silent = true }) -- Управление буферами -- kmap("n", "bn", "bnext", { noremap = true, silent = true, desc = "Next buffer" }) kmap("n", "bp", "bprevious", { noremap = true, silent = true, desc = "Previous buffer" }) kmap("n", "bd", "bdelete", { noremap = true, silent = true, desc = "Delete buffer" }) kmap("n", "w", "wa", { noremap = true, silent = true, desc = "Save all files" }) kmap("n", "qq", "q", { noremap = true, silent = true, desc = "Exit" }) kmap("n", "vs", "vsplit", { noremap = true, silent = true, desc = "Vertical split" }) -- Управление вкладками -- kmap("n", "", ":tabnext", { noremap = true, silent = true, desc = "Next tab" }) kmap("n", "", ":tabprevious", { noremap = true, silent = true, desc = "Previous tab" }) kmap("n", "tn", ":tabnew", { noremap = true, silent = true, desc = "New tab" }) kmap("n", "tc", ":tabclose", { noremap = true, silent = true, desc = "Close tab" }) -- Быстрый переход по вкладкам -- for i = 1, 9 do kmap("n", "", ":tabn " .. i .. "", { noremap = true, silent = true, desc = "Go to tab " .. i }) end -- Файловый менеджер -- kmap("n", "", ":NvimTreeToggle", { noremap = true, silent = true, desc = "Toggle file tree" }) -- kmap("n", "tt", ":NvimTreeToggle", { noremap = true, silent = true, desc = "Toggle file tree" }) kmap("n", "tt", ":split:terminal:startinsert", { noremap = true, silent = true }) -- Поиск с Telescope -- kmap("n", "ff", "Telescope find_files", { noremap = true, silent = true, desc = "Find files" }) kmap("n", "fg", "Telescope live_grep", { noremap = true, silent = true, desc = "Live grep" }) kmap("n", "fb", "Telescope buffers", { noremap = true, silent = true, desc = "Find buffers" }) kmap("n", "fe", "Telescope file_browser", { noremap = true, silent = true, desc = "File browser" }) -- LSP функции -- kmap("n", "e", vim.diagnostic.open_float, { noremap = true, silent = true, desc = "Show diagnostics" }) 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" }) 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" }) kmap("n", "gi", vim.lsp.buf.implementation, { noremap = true, silent = true, desc = "Go to implementation" }) kmap("n", "", vim.lsp.buf.signature_help, { noremap = true, silent = true, desc = "Signature help" }) kmap( "n", "wa", vim.lsp.buf.add_workspace_folder, { noremap = true, silent = true, desc = "Add workspace folder" } ) kmap( "n", "wr", vim.lsp.buf.remove_workspace_folder, { noremap = true, silent = true, desc = "Remove workspace folder" } ) kmap("n", "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, { noremap = true, silent = true, desc = "List workspace folders" }) kmap("n", "D", vim.lsp.buf.type_definition, { noremap = true, silent = true, desc = "Type definition" }) kmap("n", "rn", vim.lsp.buf.rename, { noremap = true, silent = true, desc = "Rename symbol" }) kmap("n", "ca", vim.lsp.buf.code_action, { noremap = true, silent = true, desc = "Code actions" }) kmap("n", "gr", vim.lsp.buf.references, { noremap = true, silent = true, desc = "Find references" }) -- Отладка (DAP) -- kmap("n", "", "lua require'dapui'.toggle()", { noremap = true, silent = true, desc = "Toggle debug UI" }) kmap("n", "", function() require("dap").continue() end) kmap("n", "", function() require("dap").step_over() end) kmap("n", "", function() require("dap").step_into() end) kmap("n", "", function() require("dap").step_out() end) kmap( "n", "dt", "lua require'dapui'.toggle()", { noremap = true, silent = true, desc = "Toggle debug UI" } ) kmap("n", "dc", function() require("dap").continue() end) kmap("n", "so", function() require("dap").step_over() end) kmap("n", "si", function() require("dap").step_into() end) kmap("n", "st", function() require("dap").step_out() end) kmap("n", "b", function() require("dap").toggle_breakpoint() end) kmap("n", "B", function() require("dap").set_breakpoint() end) kmap("n", "lp", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: ")) end) kmap("n", "dr", function() require("dap").repl.open() end) kmap("n", "dl", function() require("dap").run_last() end) kmap({ "n", "v" }, "dh", function() require("dap.ui.widgets").hover() end) kmap({ "n", "v" }, "dp", function() require("dap.ui.widgets").preview() end) kmap("n", "df", function() local widgets = require("dap.ui.widgets") widgets.centered_float(widgets.frames) end) kmap("n", "ds", function() local widgets = require("dap.ui.widgets") widgets.centered_float(widgets.scopes) end) -- Кастомная функция для NvimTree -- local function change_root_to_global_cwd() local api = require("nvim-tree.api") local global_cwd = vim.fn.getcwd(-1, -1) api.tree.change_root(global_cwd) end kmap("n", "", change_root_to_global_cwd, { noremap = true, silent = true, desc = "Change tree root to CWD" })