summaryrefslogtreecommitdiff
path: root/pkgs/custom-neovim/config/lua/keymaps.lua
blob: e3502fe03f989c32224bd778df32e263aeddd46a (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
-- ╭─────────────────────────────────────────────────────────╮
-- │                         Keymaps                         │
-- ╰─────────────────────────────────────────────────────────╯

-- Create keymap function
local mapkey = function(mode, key, desc, action, plugin)
  local keymapper = plugin and require("lz.n").keymap(plugin).set or vim.keymap.set
  keymapper(mode, key, action, { noremap = true, silent = true, desc = desc })
end

-- Set the leader key
vim.g.mapleader = " "

-- Pickers
mapkey("n", "<leader>f", "Open file picker", ":Pick files<cr>", "mini.pick")
mapkey("n", "<leader>o", "Open old file picker", ":Pick oldfiles<cr>", "mini.pick")
mapkey("n", "<leader>/", "Open live grep picker", ":Pick grep_live<cr>", "mini.pick")
mapkey("n", "<leader>k", "Open colorscheme picker", ":Pick colorschemes<cr>", "mini.pick")
mapkey("n", "<leader>z", "Open zoxide picker", ":Zi<cr>", "zoxide.vim")

-- File manager
mapkey("n", "<leader>e", "Open file manager", ":lua MiniFiles.open()<cr>", "mini.files")

-- Git
mapkey("n", "<leader>g", "Manage git", "")
mapkey("n", "<leader>gg", "Open neogit", ":Neogit<cr>", "neogit")
mapkey("n", "<leader>ga", "Git add", ":Git add %:p<cr>", "mini-git")
mapkey("n", "<leader>gA", "Git add cwd", function() vim.cmd("Git add " .. vim.fn.getcwd() .. "/.") end, "mini-git")
mapkey("n", "<leader>gr", "Git remove", ":Git rm %:p<cr>", "mini-git")
mapkey("n", "<leader>gc", "Git commit", ":Git commit<cr>", "mini-git")
mapkey("n", "<leader>gs", "Git status", ":Git status<cr>", "mini-git")
mapkey("n", "<leader>gp", "Git pull", ":Git pull<cr>", "mini-git")
mapkey("n", "<leader>gP", "Git push", ":Git push<cr>", "mini-git")

-- Tabs
mapkey("n", "<leader>t", "Manage tabs", "")
mapkey("n", "<leader>tt", "Go to next tab", ":tabn<cr>")
mapkey("n", "<leader>tT", "Go to previous tab", ":tabp<cr>")
mapkey("n", "<leader>to", "Open new tab", ":tabnew<cr>")
mapkey("n", "<leader>tc", "Close current tab", ":tabclose<cr>")

-- Buffers
mapkey("n", "<leader>b", "Manage buffers", "")
mapkey("n", "<leader>bb", "Open buffer picker", ":Pick buffers<cr>", "mini.pick")
mapkey("n", "<leader>bc", "Clear invisible buffers", function ()
  local bufinfos = vim.fn.getbufinfo({buflisted = 1})
  vim.tbl_map(function (bufinfo)
    if bufinfo.changed == 0 and (not bufinfo.windows or #bufinfo.windows == 0) then
      vim.api.nvim_buf_delete(bufinfo.bufnr, {force = false, unload = false})
      vim.cmd.redrawtabline()
    end
  end, bufinfos)
end)

-- Comment box
mapkey("n", "<leader>j", "Manage comment graphics", "")
mapkey("n", "<leader>jb", "Create comment box", ":CB")

-- Session
mapkey("n", "<leader>w", "Manage sessions", "")
mapkey("n", "<leader>ww", "Open a session", ":Autosession search<cr>", "mini.pick")
mapkey("n", "<leader>wd", "Delete a session", ":Autosession delete<cr>", "mini.pick")
mapkey("n", "<leader>wr", "Restore last session", ":SessionRestore<cr>")
mapkey("n", "<leader>wp", "Purge orphaned sessions", ":SessionPurgeOrphaned<cr>")
mapkey("n", "<leader>ws", "Save session", ":SessionSave<cr>")

-- Terminal
mapkey("n", "<leader>n", "Open terminal", ":botright terminal<cr>")

-- Markview
mapkey("n", "<leader>v", "Toggle markview", ":Markview<cr>", "markview.nvim")

-- Toggle spellcheck
mapkey("n", "zq", "Toggle spellcheck", ":set spell!<cr>")

-- Spelling suggestions
mapkey("n", "z=", "Pick spelling suggestions", ":Pick spellsuggest<cr>")

-- Do operations without yanking
mapkey({ "n", "v" }, "<leader>d", "Fully delete", [["_d]])
mapkey({ "n", "v" }, "<leader>D", "Fully delete line", [["_D]])
mapkey({ "n", "v" }, "<leader>x", "Fully delete character", [["_x]])
mapkey({ "n", "v" }, "<leader>X", "Fully delete previous character", [["_X]])
mapkey({ "n", "v" }, "<leader>c", "Fully change", [["_c]])
mapkey({ "n", "v" }, "<leader>C", "Fully change line", [["_C]])
mapkey({ "v" }, "<leader>p", "Fully put", [[P]])

-- Paste on newline
mapkey("n", "<leader>p", "Paste on newline", ":pu<cr>")

-- Visual Movement Keys
mapkey({ "n", "v" }, "j", "Go down visually", "gj")
mapkey({ "n", "v" }, "k", "Go up visually", "gk")
mapkey({ "n", "v" }, "<down>", "Go down visually", "g<down>")
mapkey({ "n", "v" }, "<up>", "Go up visually", "g<up>")

-- Falling key
mapkey("n", "<leader>u", "Make it rain", ":CellularAutomaton make_it_rain<cr>", "cellular-automaton.nvim")

-- QOL Keys
mapkey("t", "<Esc><Esc>", "Exit terminal insert mode", "<C-\\><C-n>")
vim.keymap.set("c", "<cr>", function()
  if vim.fn.pumvisible() == 1 then return '<c-y>' end
  return '<cr>'
end, { expr = true })                                -- Make enter complete command.
mapkey("n", "<esc>", "Clear highlights", ":noh<cr>") -- Make esc clear highlights