summaryrefslogtreecommitdiff
path: root/nvim/lua/keymaps.lua
blob: 7de22352d96e600734be3d1b4cc805b20fbf38a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
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 })

-- Фикс для визуального режима
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 })

-- Управление буферами --
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", "<leader>w", "<cmd>wa<CR>", { noremap = true, silent = true, desc = "Save all files" })
kmap("n", "qq", "<cmd>q<CR>", { noremap = true, silent = true, desc = "Exit" })
kmap("n", "<leader>vs", "<cmd>vsplit<CR>", { noremap = true, silent = true, 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", "<leader>tn", ":tabnew<CR>", { noremap = true, silent = true, desc = "New tab" })
kmap("n", "<leader>tc", ":tabclose<CR>", { noremap = true, silent = true, 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

-- Файловый менеджер --
kmap("n", "<F3>", ":NvimTreeToggle<CR>", { noremap = true, silent = true, desc = "Toggle file tree" })
-- kmap("n", "<leader>tt", ":NvimTreeToggle<CR>", { noremap = true, silent = true, desc = "Toggle file tree" })

kmap("n", "<leader>tt", ":split<CR>:terminal<CR>:startinsert<CR>", { noremap = true, silent = true })

-- Поиск с Telescope --
kmap("n", "<leader>ff", "<cmd>Telescope find_files<CR>", { noremap = true, silent = true, desc = "Find files" })
kmap("n", "<leader>fg", "<cmd>Telescope live_grep<CR>", { noremap = true, silent = true, desc = "Live grep" })
kmap("n", "<leader>fb", "<cmd>Telescope buffers<CR>", { noremap = true, silent = true, desc = "Find buffers" })
kmap("n", "<leader>fe", "<cmd>Telescope file_browser<CR>", { noremap = true, silent = true, desc = "File browser" })

-- LSP функции --
kmap("n", "<leader>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", "<C-k>", vim.lsp.buf.signature_help, { noremap = true, silent = true, desc = "Signature help" })
kmap(
	"n",
	"<leader>wa",
	vim.lsp.buf.add_workspace_folder,
	{ noremap = true, silent = true, desc = "Add workspace folder" }
)
kmap(
	"n",
	"<leader>wr",
	vim.lsp.buf.remove_workspace_folder,
	{ noremap = true, silent = true, desc = "Remove workspace folder" }
)
kmap("n", "<leader>wl", function()
	print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, { noremap = true, silent = true, desc = "List workspace folders" })
kmap("n", "<leader>D", vim.lsp.buf.type_definition, { noremap = true, silent = true, desc = "Type definition" })
kmap("n", "<leader>rn", vim.lsp.buf.rename, { noremap = true, silent = true, desc = "Rename symbol" })
kmap("n", "<leader>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", "<F9>", "<cmd>lua require'dapui'.toggle()<CR>", { noremap = true, silent = true, desc = "Toggle debug UI" })
kmap("n", "<F5>", function()
	require("dap").continue()
end)
kmap("n", "<F10>", function()
	require("dap").step_over()
end)
kmap("n", "<F11>", function()
	require("dap").step_into()
end)
kmap("n", "<F12>", function()
	require("dap").step_out()
end)
kmap(
	"n",
	"<leader>dt",
	"<cmd>lua require'dapui'.toggle()<CR>",
	{ noremap = true, silent = true, desc = "Toggle debug UI" }
)
kmap("n", "<leader>dc", function()
	require("dap").continue()
end)
kmap("n", "<leader>so", function()
	require("dap").step_over()
end)
kmap("n", "<leader>si", function()
	require("dap").step_into()
end)
kmap("n", "<leader>st", function()
	require("dap").step_out()
end)

kmap("n", "<Leader>b", function()
	require("dap").toggle_breakpoint()
end)
kmap("n", "<Leader>B", function()
	require("dap").set_breakpoint()
end)
kmap("n", "<Leader>lp", function()
	require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: "))
end)
kmap("n", "<Leader>dr", function()
	require("dap").repl.open()
end)
kmap("n", "<Leader>dl", function()
	require("dap").run_last()
end)
kmap({ "n", "v" }, "<Leader>dh", function()
	require("dap.ui.widgets").hover()
end)
kmap({ "n", "v" }, "<Leader>dp", function()
	require("dap.ui.widgets").preview()
end)
kmap("n", "<Leader>df", function()
	local widgets = require("dap.ui.widgets")
	widgets.centered_float(widgets.frames)
end)
kmap("n", "<Leader>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", "<C-c>", change_root_to_global_cwd, { noremap = true, silent = true, desc = "Change tree root to CWD" })