aboutsummaryrefslogtreecommitdiffstats
path: root/home/nvim/keymaps.lua
blob: d8907bf95ccfcab29703d23d71cf6248b00a80f7 (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
vim.g.mapleader = " "
vim.g.maplocalleader = " "
vim.keymap.set("v", "<", "<gv", { desc = "Indent left" })
vim.keymap.set("v", ">", ">gv", { desc = "Indent right" })

vim.keymap.set("n", "<leader><space>", "<cmd>Pick buffers<cr>", { desc = "Search open files" })
vim.keymap.set("n", "<leader>ff", "<cmd>Pick files<cr>", { desc = "Search all files" })
vim.keymap.set("n", "<leader>fh", "<cmd>Pick help<cr>", { desc = "Search help tags" })

-- Alternative navigation (more intuitive)
vim.keymap.set("n", "<leader>tn", ":tabnew<CR>", { desc = "New tab" })
vim.keymap.set("n", "<leader>tx", ":tabclose<CR>", { desc = "Close tab" })

-- Tab moving
vim.keymap.set("n", "<leader>tm", ":tabmove<CR>", { desc = "Move tab" })
vim.keymap.set("n", "<leader>t>", ":tabmove +1<CR>", { desc = "Move tab right" })
vim.keymap.set("n", "<leader>t<", ":tabmove -1<CR>", { desc = "Move tab left" })

vim.keymap.set("n", "<leader>dq", vim.diagnostic.disable)
vim.keymap.set("n", "<leader>ds", vim.diagnostic.enable)

vim.keymap.set({ "n", "x" }, "gy", '"+y', { desc = "Copy to clipboard" })
vim.keymap.set({ "n", "x" }, "gp", '"+p', { desc = "Paste clipboard text" })

vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>")
vim.keymap.set(
    "n",
    "<leader>q",
    vim.diagnostic.setloclist,
    { desc = "Open diagnostic [Q]uickfix list" }
)
vim.keymap.set("n", "<leader>q", ":bp<bar>sp<bar>bn<bar>bd<CR>", { desc = "Close buffer" })
vim.keymap.set("n", "<leader>Q", ":bd!<CR>", { desc = "Force close buffer" })
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })

vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" })
vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" })
vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" })
vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" })

vim.keymap.set("n", "<leader>e", "<CMD>:lua MiniFiles.open()<CR>", { desc = "Open [E]xplorer" })

vim.keymap.set("n", "<F5>", "<cmd>DapContinue<CR>", { desc = "DAP: Continue" })
vim.keymap.set("n", "<leader>bp", "<cmd>DapToggleBreakpoint<CR>", { desc = "DAP: Toggle Breakpoint" })
vim.keymap.set("n", "<F6>", "<cmd>DapStepOver<CR>", { desc = "DAP: Step Over" })
vim.keymap.set("n", "<F7>", "<cmd>DapStepInto<CR>", { desc = "DAP: Step Into" })
vim.keymap.set("n", "<F8>", "<cmd>DapStepOut<CR>", { desc = "DAP: Step Out" })
vim.keymap.set("n", "<leader>dt", "<cmd>DapTerminate<CR>", { desc = "DAP: Terminate" })

local function tab_complete()
    if vim.fn.pumvisible() == 1 then
        -- navigate to next item in completion menu
        return "<Down>"
    end

    local c = vim.fn.col(".") - 1
    local is_whitespace = c == 0 or vim.fn.getline("."):sub(c, c):match("%s")

    if is_whitespace then
        -- insert tab
        return "<Tab>"
    end

    local lsp_completion = vim.bo.omnifunc == "v:lua.vim.lsp.omnifunc"

    if lsp_completion then
        -- trigger lsp code completion
        return "<C-x><C-o>"
    end

    -- suggest words in current buffer
    return "<C-x><C-n>"
end

local function tab_prev()
    if vim.fn.pumvisible() == 1 then
        -- navigate to previous item in completion menu
        return "<Up>"
    end

    -- insert tab
    return "<Tab>"
end

vim.keymap.set("i", "<Tab>", tab_complete, { expr = true })
vim.keymap.set("i", "<S-Tab>", tab_prev, { expr = true })