summaryrefslogtreecommitdiff
path: root/pkgs/custom-neovim/config/lua/keymaps.lua
blob: 86632ee704c4218560b23f94249363db3c81d7b6 (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
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
154
-- ╭─────────────────────────────────────────────────────────╮
-- │                         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", ":FzfLua files<cr>", "fzf-lua")
mapkey("n", "<leader>o", "Open old file picker", ":FzfLua oldfiles<cr>", "fzf-lua")
mapkey("n", "<leader>/", "Open live grep picker", ":FzfLua live_grep<cr>", "fzf-lua")
mapkey("n", "<leader>k", "Open colorscheme picker", ":FzfLua colorschemes<cr>", "fzf-lua")
mapkey("n", "<leader>z", "Open zoxide picker", ":FzfLua zoxide<cr>", "fzf-lua")
mapkey("n", "<leader>l", "Open tab directory picker", function ()
  local dirstr = vim.fn.system("fd -t d")

  local pos,dirtbl = 0,{}
  for st,sp in function() return string.find(dirstr, "\n", pos, true) end do
      table.insert(dirtbl, string.sub(dirstr, pos, st - 1))
      pos = sp + 1
  end
  table.insert(dirtbl, string.sub(dirstr, pos))
  vim.ui.select(
    dirtbl,
    {},
    function (choice)
      vim.cmd.tcd(choice)
    end
  )
end, "fzf-lua")
mapkey("n", "<leader>L", "Open directory picker", function ()
  local dirstr = vim.fn.system("fd -t d")

  local pos,dirtbl = 0,{}
  for st,sp in function() return string.find(dirstr, "\n", pos, true) end do
      table.insert(dirtbl, string.sub(dirstr, pos, st - 1))
      pos = sp + 1
  end
  table.insert(dirtbl, string.sub(dirstr, pos))
  vim.ui.select(
    dirtbl,
    {},
    function (choice)
      vim.cmd.cd(choice)
    end
  )
end, "fzf-lua")

-- 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>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>gc", "Browse git commits", ":FzfLua git_commits<cr>", "fzf-lua")
mapkey("n", "<leader>gb", "Browse git branches", ":FzfLua git_branches<cr>", "fzf-lua")
mapkey("n", "<leader>gB", "Browse git blame", ":FzfLua git_blame<cr>", "fzf-lua")
mapkey("n", "<leader>gg", "Git status", ":FzfLua git_status<cr>", "fzf-lua")
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>")
mapkey("n", "<leader>tp", "Pick tabs", ":FzfLua tabs", "fzf-lua")

-- Buffers
mapkey("n", "<leader>b", "Manage buffers", "")
mapkey("n", "<leader>bb", "Open buffer picker", ":FzfLua buffers<cr>", "fzf-lua")
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 deletePicker<cr>", "mini.pick")
-- mapkey("n", "<leader>wD", "Delete current session", ":AutoSession delete<cr>", "mini.pick")
-- mapkey("n", "<leader>wr", "Restore last session", ":AutoSession restore<cr>")
-- mapkey("n", "<leader>wp", "Purge orphaned sessions", ":AutoSession purgeOrphaned<cr>")
-- mapkey("n", "<leader>ws", "Save session", ":AutoSession save<cr>")

mapkey("n", "<leader>w", "Manage sessions", "", "mini.sessions")
mapkey("n", "<leader>ww", "Open a session", ":lua MiniSessions.select('read')<cr>", "fzf-lua")
mapkey("n", "<leader>wd", "Delete a session", ":lua MiniSessions.select('delete')<cr>", "fzf-lua")
mapkey("n", "<leader>ws", "Save current session", ":lua MiniSessions.write()<cr>")
mapkey("n", "<leader>wS", "Save as new session", function()
  local session_name = vim.fn.input("Session name: ")
  vim.cmd.lua("MiniSessions.write("..session_name..")")
end)
mapkey("n", "<leader>wn", "Create new session", function()
  vim.cmd.wa()
  vim.cmd.lua("MiniSessions.write()")
  vim.cmd.new()
  vim.cmd([[.+,$bwipeout]])
  vim.cmd.cd("~")
end)

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

-- 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>")

-- 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