Skip to content

Commit 3a02718

Browse files
dam9000mayronH
authored andcommitted
Add gitsigns recommended keymaps (nvim-lua#531)
* Import gitsigns README.md recommended keymaps (and apply stylua) the previously added visual mode for ]c [c is kept. * Add gitsigns keymap descriptions
1 parent 290c662 commit 3a02718

File tree

2 files changed

+61
-37
lines changed

2 files changed

+61
-37
lines changed

lua/lazy-plugins.lua

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -64,28 +64,64 @@ require('lazy').setup({
6464
changedelete = { text = '~' },
6565
},
6666
on_attach = function(bufnr)
67-
vim.keymap.set('n', '<leader>hp', require('gitsigns').preview_hunk, { buffer = bufnr, desc = 'Preview git hunk' })
68-
69-
-- don't override the built-in and fugitive keymaps
7067
local gs = package.loaded.gitsigns
71-
vim.keymap.set({ 'n', 'v' }, ']c', function()
68+
69+
local function map(mode, l, r, opts)
70+
opts = opts or {}
71+
opts.buffer = bufnr
72+
vim.keymap.set(mode, l, r, opts)
73+
end
74+
75+
-- Navigation
76+
map({ 'n', 'v' }, ']c', function()
7277
if vim.wo.diff then
7378
return ']c'
7479
end
7580
vim.schedule(function()
7681
gs.next_hunk()
7782
end)
7883
return '<Ignore>'
79-
end, { expr = true, buffer = bufnr, desc = 'Jump to next hunk' })
80-
vim.keymap.set({ 'n', 'v' }, '[c', function()
84+
end, { expr = true, desc = 'Jump to next hunk' })
85+
86+
map({ 'n', 'v' }, '[c', function()
8187
if vim.wo.diff then
8288
return '[c'
8389
end
8490
vim.schedule(function()
8591
gs.prev_hunk()
8692
end)
8793
return '<Ignore>'
88-
end, { expr = true, buffer = bufnr, desc = 'Jump to previous hunk' })
94+
end, { expr = true, desc = 'Jump to previous hunk' })
95+
96+
-- Actions
97+
-- visual mode
98+
map('v', '<leader>hs', function()
99+
gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
100+
end, { desc = 'stage git hunk' })
101+
map('v', '<leader>hr', function()
102+
gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
103+
end, { desc = 'reset git hunk' })
104+
-- normal mode
105+
map('n', '<leader>hs', gs.stage_hunk, { desc = 'git stage hunk' })
106+
map('n', '<leader>hr', gs.reset_hunk, { desc = 'git reset hunk' })
107+
map('n', '<leader>hS', gs.stage_buffer, { desc = 'git Stage buffer' })
108+
map('n', '<leader>hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' })
109+
map('n', '<leader>hR', gs.reset_buffer, { desc = 'git Reset buffer' })
110+
map('n', '<leader>hp', gs.preview_hunk, { desc = 'preview git hunk' })
111+
map('n', '<leader>hb', function()
112+
gs.blame_line { full = false }
113+
end, { desc = 'git blame line' })
114+
map('n', '<leader>hd', gs.diffthis, { desc = 'git diff against index' })
115+
map('n', '<leader>hD', function()
116+
gs.diffthis '~'
117+
end, { desc = 'git diff against last commit' })
118+
119+
-- Toggles
120+
map('n', '<leader>tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' })
121+
map('n', '<leader>td', gs.toggle_deleted, { desc = 'toggle git show deleted' })
122+
123+
-- Text object
124+
map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', { desc = 'select git hunk' })
89125
end,
90126
},
91127
},
@@ -123,25 +159,7 @@ require('lazy').setup({
123159
},
124160
},
125161

126-
-- {
127-
-- -- Sidebar File Tree
128-
-- "nvim-neo-tree/neo-tree.nvim",
129-
-- branch = "v3.x",
130-
-- dependencies = {
131-
-- "nvim-lua/plenary.nvim",
132-
-- "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
133-
-- "MunifTanjim/nui.nvim",
134-
-- -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information
135-
-- },
136-
-- opts = {
137-
-- window = {
138-
-- width = 30,
139-
-- mappings = {
140-
-- ["o"] = "open",
141-
-- },
142-
-- }
143-
-- }
144-
-- },
162+
145163

146164
{
147165
"akinsho/bufferline.nvim",
@@ -263,7 +281,15 @@ require('lazy').setup({
263281
},
264282
},
265283

266-
-- lazy.nvim
284+
{
285+
-- Highlight, edit, and navigate code
286+
'nvim-treesitter/nvim-treesitter',
287+
dependencies = {
288+
'nvim-treesitter/nvim-treesitter-textobjects',
289+
},
290+
build = ':TSUpdate',
291+
},
292+
267293
{
268294
"folke/noice.nvim",
269295
event = "VeryLazy",
@@ -281,15 +307,6 @@ require('lazy').setup({
281307
config = true
282308
},
283309

284-
{
285-
-- Highlight, edit, and navigate code
286-
'nvim-treesitter/nvim-treesitter',
287-
dependencies = {
288-
'nvim-treesitter/nvim-treesitter-textobjects',
289-
},
290-
build = ':TSUpdate',
291-
},
292-
293310
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
294311
-- These are some example plugins that I've included in the kickstart repository.
295312
-- Uncomment any of the lines below to enable them.

lua/lsp-setup.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ require('which-key').register {
4848
['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' },
4949
['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' },
5050
['<leader>g'] = { name = '[G]it', _ = 'which_key_ignore' },
51-
['<leader>h'] = { name = 'More git', _ = 'which_key_ignore' },
51+
['<leader>h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' },
5252
['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' },
5353
['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' },
54+
['<leader>t'] = { name = '[T]oggle', _ = 'which_key_ignore' },
5455
['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' },
5556
}
57+
-- register which-key VISUAL mode
58+
-- required for visual <leader>hs (hunk stage) to work
59+
require('which-key').register({
60+
['<leader>'] = { name = 'VISUAL <leader>' },
61+
['<leader>h'] = { 'Git [H]unk' },
62+
}, { mode = 'v' })
5663

5764
-- mason-lspconfig requires that these setup functions are called in this order
5865
-- before setting up the servers.

0 commit comments

Comments
 (0)