aboutsummaryrefslogtreecommitdiff
path: root/lua/user/keys.lua
blob: 7e2c2c3fb152d4901abfa5092580afa911682d43 (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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
--[[ key.lua ]]

------------- Shorten Function Names --------------
local keymap = vim.keymap
local map = function(mode, l, r, opts)
  opts = opts or {}
  opts.silent = true
  opts.noremap = true
  keymap.set(mode, l, r, opts)
end
local term_opts = { noremap = true, silent = false }


--------------- Standard Operations ---------------
-- Semi-colon as leader key
vim.g.mapleader = ";"

-- Jump to next match on line using `.` instead of `;` NOTE: commented out in favour of "ggandor/flit.nvim"
--map("n", ".", ";")

-- Repeat last command using `<Space>` instead of `.` NOTE: commented out in favour of "ggandor/flit.nvim"
--map("n", "<Space>", ".")

-- "jj" to exit insert-mode
map("i", "jj", "<esc>")

-- Reload nvim config
map("n", "<leader><CR>", "<cmd>luafile ~/.config/nvim/init.lua<CR> | :echom ('Nvim config loading...') | :sl! | echo ('')<CR>")


--------------- Extended Operations ---------------
-- Use q to quit on floating windows otherwise still use it for macros
map('n', 'q', function()
  local config = vim.api.nvim_win_get_config(0)
  if config.relative ~= "" then -- is_floating_window?
    return ":silent! close!<CR>"
  elseif
    vim.o.buftype == 'quickfix' then
    return ":quit<CR>"
  elseif
    vim.o.buftype == 'help' then
    return ":close<CR>"
  else
    return "q"
  end
end, {expr = true, replace_keycodes = true})

-- Combine buffers list with buffer name
map("n", "<Leader>b", ":buffers<CR>:buffer<Space>")

-- Buffer confirmation
map("n", "<leader>y", ":BufferPick<CR>")

-- Map buffer next, prev and delete to <leader>+(n/p/d) respectively
map("n", "<leader>n", ":bn<cr>")
map("n", "<leader>p", ":bp<cr>")
map("n", "<leader>d", ":bd<cr>")

-- List marks
map("n", "<Leader>m", ":marks<CR>")

-- Messages
map("n", "<Leader>M", ":messages<CR>")

-- Clear messages

-- Clear messages or just refresh/redraw the screen
map("n", "<leader>u", ":echo '' | redraw<CR>")

-- Unsets the 'last search pattern' register by hitting return
--map("n", "<CR>", "!silent :noh<CR><CR>")

-- Toggle set number
map("n", "<leader>$", ":NumbersToggle<CR>")
map("n", "<leader>%", ":NumbersOnOff<CR>")

-- Easier split navigations, just ctrl-j instead of ctrl-w then j
--map("n", "<C-J>", "<C-W><C-J>")
--map("n", "<C-K>", "<C-W><C-K>")
--map("n", "<C-L>", "<C-W><C-L>")
--map("n", "<C-H>", "<C-W><C-H>")

-- Split window
map("n", "<leader>h", ":split<CR>")
map("n", "<leader>v", ":vsplit<CR>")
map("n", "<leader>c", "<C-w>c")

-- Resize Panes
map("n", "<Leader>+", ":resize +5<CR>")
map("n", "<Leader>-", ":resize -5<CR>")
map("n", "<Leader><", ":vertical resize +5<CR>")
map("n", "<Leader>>", ":vertical resize -5<CR>")
map("n", "<Leader>=", "<C-w>=")

-- Map Alt+(h/j/k/l) in insert mode to move directional
map("i", "<A-h>", "<left>")
map("i", "<A-j>", "<down>")
map("i", "<A-k>", "<up>")
map("i", "<A-l>", "<right>")

-- Map Alt+(h/j/k/l) in command mode to move directional
map("c", "<A-h>", "<left>")
map("c", "<A-j>", "<down>")
map("c", "<A-k>", "<up>")
map("c", "<A-l>", "<right>")

-- Map Alt+(h/j/k/l) in selection mode to move directional
map("s", "<A-h>", "<left>")
map("s", "<A-j>", "<down>")
map("s", "<A-k>", "<up>")
map("s", "<A-l>", "<right>")

-- Create tab, edit and move between them
map("n", "<C-T>n", ":tabnew<CR>")
map("n", "<C-T>e", ":tabedit")
map("n", "<leader>[", ":tabprev<CR>")
map("n", "<leader>]", ":tabnext<CR>")

-- "Zoom" a split window into a tab and/or close it
--map("n", "<Leader>,", ":tabnew %<CR>")
--map("n", "<Leader>.", ":tabclose<CR>")

-- Vim TABs
map("n", "<leader>1", "1gt<CR>")
map("n", "<leader>2", "2gt<CR>")
map("n", "<leader>3", "3gt<CR>")
map("n", "<leader>4", "4gt<CR>")
map("n", "<leader>5", "5gt<CR>")
map("n", "<leader>6", "6gt<CR>")
map("n", "<leader>7", "7gt<CR>")
map("n", "<leader>8", "8gt<CR>")
map("n", "<leader>9", "9gt<CR>")
map("n", "<leader>0", "10gt<CR>")

-- Move to the next and previous item in the quickfixlist
--map("n", "]c", "<Cmd>cnext<CR>")
--map("n", "[c", "<Cmd>cprevious<CR>")

-- Hitting ESC when inside a terminal to get into normal mode
--map("t", "<Esc>", [[<C-\><C-N>]])

-- Move block (indentation) easily
map("n", "<", "<<", term_opts)
map("n", ">", ">>", term_opts)
map("x", "<", "<gv", term_opts)
map("x", ">", ">gv", term_opts)

-- Set alt+(j/k) to switch lines of texts or simply move them
map("n", "<A-k>", ':let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>')
map("n", "<A-j>", ':let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>')

-- Search and replace
map("v", "<leader>sr", 'y:%s/<C-r><C-r>"//g<Left><Left>c')

-- Toggle Diff
map("n", "<leader>dt", "<Cmd>call utils#ToggleDiff()<CR>")

-- Map delete to Ctrl+l
map("i", "<C-l>", "<Del>")

-- Clear screen
map("n", "<leader><C-l>", "<Cmd>!clear<CR>")

-- Change file to an executable
map("n", "<leader>x", ":!chmod +x %<CR>")

-- Paste without replace clipboard
map("v", "p", '"_dP')

-- Swap two pieces of text, use x to cut in visual mode, then use Ctrl-x in
-- visual mode to select text to swap with
map("v", "<C-X>", "<Esc>`.``gvP``P")

-- Change Working Directory to current project
map("n", "<leader>cd", ":cd %:p:h<CR>:pwd<CR>")

-- Open the current file in the default program (on Mac this should just be just `open`)
map('n', '<leader>o', ':!xdg-open %<cr><cr>')

-- Toggle completion
map("n", "<Leader>tc", ":lua require('user.mods').toggle_completion()<CR>")

-- Disable default completion.
map('i', '<C-n>', '<Nop>')
map('i', '<C-p>', '<Nop>')

-- Set line wrap
map("n", "<M-z>", function()
	local wrap_status = vim.api.nvim_exec("set wrap ?", true)

	if wrap_status == "nowrap" then
		vim.api.nvim_command("set wrap linebreak")
		print("Wrap enabled")
	else
		vim.api.nvim_command("set wrap nowrap")
		print("Wrap disabled")
	end
end, { silent = true })

-- Toggle between folds
--utils.map("n", "<F2>", "&foldlevel ? 'zM' : 'zR'", { expr = true })

-- Use space to toggle fold
--utils.map("n", "<Space>", "za")

-- Make a copy of current file
vim.cmd([[
  map <leader>s :up \| saveas! %:p:r-<C-R>=strftime("%y.%m.%d-%H:%M")<CR>-bak.<C-R>=expand("%:e")<CR> \| 3sleep \| e #<CR>
]])

-- Toggle transparency
map('n', '<leader>tb', ':call utils#Toggle_transparent_background()<CR>')

-- Toggle zoom
map("n", "<leader>z", ":call utils#ZoomToggle()<CR>")
map("n", "<C-w>z", "<C-w>|<C-w>_")

-- Toggle statusline
map('n', '<S-h>', ':call ToggleHiddenAll()<CR>')

-- Open last closed buffer
map("n", "<C-t>", ":call OpenLastClosed()<CR>")


---------------- Plugin Operations ----------------
-- Packer
map("n", "<leader>Pc", "<cmd>PackerCompile<cr>")
map("n", "<leader>Pi", "<cmd>PackerInstall<cr>")
map("n", "<leader>Ps", "<cmd>PackerSync<cr>")
map("n", "<leader>PS", "<cmd>PackerStatus<cr>")
map("n", "<leader>Pu", "<cmd>PackerUpdate<cr>")

-- Tmux navigation (aserowy/tmux.nvim)
map('n', '<C-h>', '<CMD>NavigatorLeft<CR>')
map('n', '<C-l>', '<CMD>NavigatorRight<CR>')
map('n', '<C-k>', '<CMD>NavigatorUp<CR>')
map('n', '<C-j>', '<CMD>NavigatorDown<CR>')

-- ToggleTerm
--map("n", "<leader>tt", "<cmd>ToggleTerm<cr>")

-- LazyGit
map({"n", "t"}, "<leader>gg", "<cmd>lua Lazygit_toggle()<CR>")

-- Fugitive git bindings
map("n", "<leader>ga", ":Git add %:p<CR><CR>")
--map("n", "<leader>gs", ":Gstatus<CR>")
map("n", "<leader>gc", ":Gcommit -v -q<CR>")
map("n", "<leader>gt", ":Gcommit -v -q %:p<CR>")
--map("n", "<leader>gd", ":Gdiff<CR>")
map("n", "<leader>ge", ":Gedit<CR>")
--map("n", "<leader>gr", ":Gread<Cj>")
map("n", "<leader>gw", ":Gwrite<CR><CR>")
map("n", "<leader>gl", ":silent! Glog<CR>:bot copen<CR>")
--map("n", "<leader>gp", ":Ggrep<Space>")
--map("n", "<Leader>gp", ":Git push<CR>")
--map("n", "<Leader>gb", ":Gblame<CR>")
map("n", "<leader>gm", ":Gmove<Space>")
--map("n", "<leader>gb", ":Git branch<Space>")
--map("n", "<leader>go", ":Git checkout<Space>")
--map("n", "<leader>gps", ":Dispatch! git push<CR>")
--map("n", "<leader>gpl", ":Dispatch! git pull<CR>")
--  map["<C-\\>"] = { "<cmd>ToggleTerm<cr>", desc = "Toggle terminal" }
--  map["<leader>tn"] = { function() toggle_term_cmd "node" end, desc = "ToggleTerm node" }
--  map["<leader>tu"] = { function() toggle_term_cmd "ncdu" end, desc = "ToggleTerm NCDU" }
--  map["<leader>tt"] = { function() toggle_term_cmd "htop" end, desc = "ToggleTerm htop" }
--  map["<leader>tp"] = { function() toggle_term_cmd "python" end, desc = "ToggleTerm python" }
--  map["<leader>tl"] = { function() toggle_term_cmd "lazygit" end, desc = "ToggleTerm lazygit" }
--  map["<leader>tf"] = { "<cmd>ToggleTerm direction=float<cr>", desc = "ToggleTerm float" }
--  map["<leader>th"] = { "<cmd>ToggleTerm size=10 direction=horizontal<cr>", desc = "ToggleTerm horizontal split" }
--  map["<leader>tv"] = { "<cmd>ToggleTerm size=80 direction=vertical<cr>", desc = "ToggleTerm vertical split" }
--end

-- Telescope
map("n", "<leader>ff", function() require("telescope.builtin").find_files { hidden = true, no_ignore = true } end) -- find all files
map("n", "<leader>fF", "<cmd>lua require('telescope.builtin').find_files()<cr>") -- find files with hidden option
map("n", "<leader>fg", "<cmd>lua require('telescope.builtin').live_grep()<cr>")
map("n", "<leader>fb", "<cmd>lua require('telescope.builtin').buffers()<cr>")
map("n", "<leader>fh", "<cmd>lua require('telescope.builtin').help_tags()<cr>")
map("n", "<leader>fc", "<cmd>lua require('telescope.builtin').commands()<cr>")
map("n", "<leader>ffc", "<cmd>lua require('telescope.builtin').current_buffer_fuzzy_find()<cr>")
map("n", "<leader>cf", "<cmd>Telescope changed_files<cr>")
map("n", "<leader>fp", "<cmd>Telescope pickers<cr>")
map("n", "<leader>fr", "<cmd>lua require('telescope.builtin').registers({})<CR>") -- registers picker
map("n", "<leader>fd", "<cmd>lua require('telescope.builtin').diagnostics()<cr>")
map("n", "<leader>fk", "<cmd>lua require('telescope.builtin').keymaps()<cr>")
map("n", "<leader>fn", [[<Cmd>lua require'plugins.telescope'.find_notes()<CR>]]) -- find notes
map("n", "<leader>fgn", [[<Cmd>lua require'plugins.telescope'.grep_notes()<CR>]]) -- search notes
map("n", "<leader>f.", [[<Cmd>lua require'plugins.telescope'.find_configs()<CR>]]) -- find configs
map("n", "<leader>fs", [[<Cmd>lua require'plugins.telescope'.find_scripts()<CR>]]) -- find notes
map("n", "<leader>fm", "<cmd>lua require('telescope').extensions.media_files.media_files({})<cr>") -- find media files
map("n", "<leader>fi", "<cmd>lua require('telescope').extensions.notify.notify({})<cr>") -- find media files

-- FZF
map("n", "<leader>fz", "<cmd>lua require('fzf-lua').files()<CR>")

-- Nvim-tree
map("n", "<leader>f", ":NvimTreeToggle<CR>", {})

-- Markdown-preview
map("n", "<leader>md", "<Plug>MarkdownPreviewToggle")
map("n", "<leader>mg", "<CMD>Glow<CR>")

-- Autopairs
map("n", "<leader>ww", "<cmd>lua require('user.mods').Toggle_autopairs()<CR>")

-- Zen-mode toggle
map("n", "<leader>zm", "<CMD>ZenMode<CR> | :echom ('Zen Mode')<CR> | :sl! | echo ('')<CR>")

-- Vim-rooter
map("n", "<leader>ro", "<CMD>Rooter<CR> | :echom ('cd to root/project directory')<CR> | :sl! | echo ('')<CR>", term_opts)

-- Trouble (UI to show diagnostics)
map("n", "<leader>t", "<CMD>TroubleToggle<CR>")
map("n", "<leader>tw", "<CMD>TroubleToggle workspace_diagnostics<CR>")
map("n", "<leader>td", "<CMD>TroubleToggle document_diagnostics<CR>")
map("n", "<leader>tq", "<CMD>TroubleToggle quickfix<CR>")
map("n", "<leader>tl", "<CMD>TroubleToggle loclist<CR>")
map("n", "gR", "<CMD>TroubleToggle lsp_references<CR>")

-- Replacer
map('n', '<Leader>qr', ':lua require("replacer").run()<CR>')

-- Quickfix
map("n", "<leader>q", function()
    if vim.fn.getqflist({ winid = 0 }).winid ~= 0 then
        require('plugins.quickfix').close()
    else
        require('plugins.quickfix').open()
        --require("quickfix").open()
    end
end, { desc = "Toggle quickfix window" })

-- Dashboard
map("n", "<leader>db", "<CMD>Dashboard<CR>")

-- 
map("", "<Leader>l", require("lsp_lines").toggle, { desc = "Toggle lsp_lines" })