]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/config/keymaps.lua
+use/op(nvim): add keymap to go to definition
[julm/julm-nix.git] / home-manager / profiles / nvim / lua / config / keymaps.lua
1 -- Navigating text
2 vim.keymap.set("n", "i", "gk", {})
3 vim.keymap.set("n", "k", "gj", {})
4 vim.keymap.set("n", "j", "<Left>", {})
5 vim.keymap.set("n", "l", "<Right>", {})
6 vim.keymap.set("x", "i", "gk", {})
7 vim.keymap.set("x", "k", "gj", {})
8 vim.keymap.set("x", "j", "<Left>", {})
9 vim.keymap.set("x", "l", "<Right>", {})
10 vim.keymap.set("n", "J", "<Home>", {})
11 vim.keymap.set("n", "L", "<End>", {})
12
13 -- Navigating windows
14 vim.keymap.set("n", "<C-w>k", ":wincmd j<CR>", {})
15 vim.keymap.set("n", "<C-w>i", ":wincmd k<CR>", {})
16 vim.keymap.set("n", "<C-w>j", ":wincmd h<CR>", {})
17 vim.keymap.set("n", "<C-w>l", ":wincmd l<CR>", {})
18
19 -- Navigating with LSP
20 vim.keymap.set("n", "gd", function()
21 vim.lsp.buf.definition()
22 end, { silent = true, desc = "Go to definition" })
23
24 -- Navigating the buffer list
25 -- vim.keymap.set("n", "<C-i>", ":bprevious!<CR>", { silent = true })
26 -- vim.keymap.set("n", "<C-k>", ":bnext!<CR>", { silent = true })
27 vim.keymap.set("n", "<C-i>", function()
28 local manager = require("neo-tree.sources.manager")
29 local state = manager.get_state("buffers")
30 if state.tree == nil then
31 require("neo-tree.command").execute({ reveal = true })
32 end
33 local renderer = require("neo-tree.ui.renderer")
34 local scroll_padding = 3
35 renderer.focus_node(state, nil, true, -1, scroll_padding)
36 local node = state.tree:get_node()
37 if node.type == "directory" then
38 return -- state.commands.open(state) would state.commands.toggle_node(state)
39 else
40 state.commands.open(state)
41 end
42 end, { silent = true, desc = "Navigate down buffers in neo-tree's order" })
43
44 vim.keymap.set("n", "<C-k>", function()
45 local manager = require("neo-tree.sources.manager")
46 local state = manager.get_state("buffers")
47 if state.tree == nil then
48 require("neo-tree.command").execute({ reveal = true })
49 end
50 local renderer = require("neo-tree.ui.renderer")
51 local scroll_padding = 3
52 renderer.focus_node(state, nil, true, 1, scroll_padding)
53 local node = state.tree:get_node()
54 if node.type == "directory" then
55 return -- state.commands.open(state) would state.commands.toggle_node(state)
56 else
57 state.commands.open(state)
58 end
59 end, { silent = true, desc = "Navigate down buffers in neo-tree's order" })
60 vim.keymap.set("n", "m", "<leader>fb", { desc = "Switch buffer", silent = true })
61 vim.keymap.set("n", "<leader>m", ":buffer #<CR>", { desc = "Go to last buffer", silent = true })
62 -- Navigating the location list
63 -- vim.keymap.set("n", "<C-j>", ":lprevious<CR>", {})
64 -- vim.keymap.set("n", "<C-l>", ":lnext<CR>", {})
65 -- Navigating the quickfix list
66 vim.keymap.set("n", "<C-u>", ":cprevious<CR>", {})
67 vim.keymap.set("n", "<C-o>", ":cnext<CR>", {})
68
69 -- Modifing text
70 --- Maintain Visual Mode after shifting > and <
71 vim.keymap.set("v", "<", "<gv", {})
72 vim.keymap.set("v", ">", ">gv", {})
73 --- Copy line
74 vim.keymap.set("n", "Y", "Vy", {})
75 --- Joining lines
76 vim.keymap.set("n", "K", ":join<CR>", {})
77
78 -- Searching text
79 local search_buffer = function(pattern)
80 vim.opt.hlsearch = true
81 vim.fn.setreg("/", pattern)
82 end
83 -- Alternative to Telescope live_grep({ grep_open_files = true })
84 -- followed by <C-q> to but the results in a quicklist.
85 local search_buffers = function(pattern)
86 vim.opt.hlsearch = true
87 vim.fn.setreg("/", pattern)
88 vim.api.nvim_command(string.format(
89 "vimgrep /%s/g %s",
90 pattern,
91 vim.fn.join(
92 vim.tbl_map(function(n)
93 return vim.fn.fnameescape(n.name)
94 end, vim.fn.getbufinfo({ buflisted = 1 })),
95 " "
96 )
97 ))
98 end
99 vim.api.nvim_create_user_command("G", function(opts)
100 search_buffers(vim.fn.join(opts.fargs, " "))
101 end, { desc = "Search argument in all buffers", nargs = 1 })
102 vim.api.nvim_create_user_command("Bclose", function(opts)
103 vim.tbl_map(function(b)
104 vim.api.nvim_buf_delete(b.bufnr, { force = false, unload = false })
105 end, vim.fn.getbufinfo({ buflisted = 1 }))
106 local manager = require("neo-tree.sources.manager")
107 local utils = require("neo-tree.utils")
108 local refresh = utils.wrap(manager.refresh, "buffers")
109 refresh()
110 end, { desc = "Close all buffers", nargs = 0 })
111
112 vim.keymap.set("n", "*", function()
113 search_buffer("\\<" .. vim.fn.expand("<cword>") .. "\\>")
114 end, { silent = true, desc = "Search word under cursor in current buffer" })
115 vim.keymap.set("n", "<C-n>", function()
116 search_buffers("\\<" .. vim.fn.expand("<cword>") .. "\\>")
117 end, { silent = true, desc = "Search word under cursor in all buffers" })
118
119 vim.keymap.set("n", "µ", function()
120 search_buffer(vim.fn.expand("<cword>"))
121 end, { silent = true, desc = "Search subword under cursor in current buffers" })
122 vim.keymap.set("n", "<C-m>", function()
123 search_buffers(vim.fn.expand("<cword>"))
124 end, { silent = true, desc = "Search subword under cursor in all buffers" })