summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/core/keymaps.lua
blob: a65133d63357bb8b00221e7ccc8739fbe7d0bfc7 (plain)
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
-- Core keymaps
-- General key mappings not tied to specific plugins

-- Leader key
vim.g.mapleader = " "

----------------
-- NORMAL MODE
----------------

-- File operations
vim.keymap.set("n", "<leader>w", "<cmd>w<cr>", { desc = "Save file" })
vim.keymap.set("n", "<leader>q", "<cmd>q<cr>", { desc = "Quit" })
vim.keymap.set("n", "<leader>Q", "<cmd>q!<cr>", { desc = "Force quit" })
vim.keymap.set("n", "<C-c>", "<cmd>bd<cr>", { desc = "Close buffer" })

-- Quick buffer navigation
vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Move to left window" })
vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Move to bottom window" })
vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Move to top window" })
vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Move to right window" })

-- Quick formatting
vim.keymap.set("n", "<leader>S", "ggVG=", { desc = "Format entire file" })

-- Quick line operations
vim.keymap.set("n", "<leader>o", "o<Esc>", { desc = "New line below" })
vim.keymap.set("n", "<leader>O", "O<Esc>", { desc = "New line above" })
vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and maintain cursor" })

-- Better vertical navigation
vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Half page down and center" })
vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Half page up and center" })
vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result and center" })
vim.keymap.set("n", "N", "Nzzzv", { desc = "Prev search result and center" })

-- Clipboard operations
vim.keymap.set({"n", "v"}, "<leader>y", [["+y]], { desc = "Copy to system clipboard" })
vim.keymap.set("n", "<leader>Y", [["+Y]], { desc = "Copy line to system clipboard" })
vim.keymap.set({"n", "v"}, "<leader>d", [["_d]], { desc = "Delete to void register" })
vim.keymap.set("x", "<leader>p", [["_dP]], { desc = "Paste over selection" })

-- Quickfix navigation
vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz", { desc = "Next quickfix item" })
vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz", { desc = "Previous quickfix item" })

-- Undo remap
vim.keymap.set("n", "U", "<C-r>", { desc = "Redo" })

-- Search and replace current word
vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
    { desc = "Replace current word" })

-- Terminal keymaps
vim.keymap.set("n", "<leader>t", "<cmd>ToggleTerm<cr>", { desc = "Toggle terminal" })
vim.keymap.set({"n", "i"},"<C-r><C-k>", "<cmd>ToggleTermSendCurrentLine<cr>j", { desc = "Send line to terminal" })
vim.keymap.set("n","<C-r><C-j>", "ggVG:'<,'>ToggleTermSendVisualLines<cr>", { desc = "Send file to terminal" })
vim.keymap.set("i","<C-r><C-j>", "<Esc>ggVG:'<,'>ToggleTermSendVisualLines<cr><Esc>i", { desc = "Send file to terminal" })
vim.keymap.set("v","<C-r><C-k>", ":ToggleTermSendVisualLines<cr><Esc>", { desc = "Send selection to terminal" })

-- File browser
vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory with Oil" })

-- LSP
-- Jump to definition with gd
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {noremap=true, silent=true})
-- Optional: Add other useful LSP keybindings
vim.keymap.set('n', 'gr', vim.lsp.buf.references, {noremap=true, silent=true})
vim.keymap.set('n', 'K', vim.lsp.buf.hover, {noremap=true, silent=true})
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, {noremap=true, silent=true})
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, {noremap=true, silent=true})
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, { noremap=true, silent=true, desc = "Show diagnostics" })

-- Python docstring helper
vim.keymap.set("n", "<leader>dc", ":PythonDocstring<CR>", {
    silent = true,
    desc = "Insert Python docstring template"
})

----------------
-- INSERT MODE
----------------

vim.keymap.set("i", "jk", "<Esc>", { desc = "Exit insert mode" })
vim.keymap.set("i", "<leader>e", "<Space>e", { desc = "Insert e after leader" })
vim.keymap.set("i", "<C-c>", "<cmd>bd<cr>", { desc = "Close buffer" })

----------------
-- VISUAL MODE
----------------

-- Move selected lines
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" })

-- Telescope keymaps (grouped for related functionality)
vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files theme=dropdown<cr>", { desc = "Find files" })
vim.keymap.set("n", "<leader>fm", "<cmd>Telescope find_files cwd=D:/Optics/CODEV/Macros theme=dropdown<cr>", { desc = "Find macro files" })
vim.keymap.set("n", "<leader>fc", "<cmd>Telescope find_files cwd=C:/CODEV202403/macro theme=dropdown<cr>", { desc = "Find CODEV macro files" })
vim.keymap.set("n", "<leader>fl", "<cmd>Telescope find_files cwd=C:/CODEV202403/lens theme=dropdown<cr>", { desc = "Find lens files" })
vim.keymap.set("n", "<leader>gg", "<cmd>Telescope live_grep theme=dropdown<cr>", { desc = "Live grep" })
vim.keymap.set("n", "<leader>gm", "<cmd>Telescope live_grep cwd=D:/Optics/CODEV/Macros theme=dropdown<cr>", { desc = "Grep in macro files" })
vim.keymap.set("n", "<leader>gc", "<cmd>Telescope live_grep cwd=C:/CODEV202403/macro theme=dropdown<cr>", { desc = "Grep in CODEV macro files" })
vim.keymap.set("n", "<leader>gl", "<cmd>Telescope live_grep cwd=C:/CODEV202403/lens theme=dropdown<cr>", { desc = "Grep in lens files" })
vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers theme=dropdown<cr>", { desc = "List buffers" })

-- Harpoon keymaps
vim.keymap.set("n", "<leader>a", function() require("harpoon"):list():add() end, { desc = "Add file to harpoon" })
vim.keymap.set("n", "<C-e>", function() require("harpoon").ui:toggle_quick_menu(require("harpoon"):list()) end, { desc = "Toggle harpoon menu" })
vim.keymap.set("n", "<leader>j", function() require("harpoon"):list():select(1) end, { desc = "Harpoon file 1" })
vim.keymap.set("n", "<leader>k", function() require("harpoon"):list():select(2) end, { desc = "Harpoon file 2" })
vim.keymap.set("n", "<leader>l", function() require("harpoon"):list():select(3) end, { desc = "Harpoon file 3" })
vim.keymap.set("n", "<leader>;", function() require("harpoon"):list():select(4) end, { desc = "Harpoon file 4" })
vim.keymap.set("n", "<leader>N", function() require("harpoon"):list():prev() end, { desc = "Previous harpoon file" })
vim.keymap.set("n", "<leader>P", function() require("harpoon"):list():next() end, { desc = "Next harpoon file" })

-- Other tool keymaps
vim.keymap.set("n", "<leader>G", vim.cmd.Git, { desc = "Open Git status" })
vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle, { desc = "Toggle undo tree" })
vim.keymap.set("n", "[c", function() require("treesitter-context").go_to_context() end, { desc = "Go to context", silent = true })
Back to https://optics-design.com