@@ -255,6 +255,58 @@ require('lazy').setup({
255
255
topdelete = { text = ' ‾' },
256
256
changedelete = { text = ' ~' },
257
257
},
258
+ on_attach = function (bufnr )
259
+ local gs = package.loaded .gitsigns
260
+
261
+ local function map (mode , l , r , opts )
262
+ opts = opts or {}
263
+ opts .buffer = bufnr
264
+ vim .keymap .set (mode , l , r , opts )
265
+ end
266
+
267
+ -- Navigation
268
+ map ({ ' n' , ' v' }, ' ]c' , function ()
269
+ if vim .wo .diff then
270
+ return ' ]c'
271
+ end
272
+ vim .schedule (gs .next_hunk )
273
+ return ' <Ignore>'
274
+ end , { expr = true , desc = ' Jump to next git [c]hange' })
275
+
276
+ map ({ ' n' , ' v' }, ' [c' , function ()
277
+ if vim .wo .diff then
278
+ return ' [c'
279
+ end
280
+ vim .schedule (gs .prev_hunk )
281
+ return ' <Ignore>'
282
+ end , { expr = true , desc = ' Jump to previous git [c]hange' })
283
+
284
+ -- Actions
285
+ -- visual mode
286
+ map (' v' , ' <leader>hs' , function ()
287
+ gs .stage_hunk { vim .fn .line ' .' , vim .fn .line ' v' }
288
+ end , { desc = ' stage git hunk' })
289
+ map (' v' , ' <leader>hr' , function ()
290
+ gs .reset_hunk { vim .fn .line ' .' , vim .fn .line ' v' }
291
+ end , { desc = ' reset git hunk' })
292
+ -- normal mode
293
+ map (' n' , ' <leader>hs' , gs .stage_hunk , { desc = ' git [s]tage hunk' })
294
+ map (' n' , ' <leader>hr' , gs .reset_hunk , { desc = ' git [r]eset hunk' })
295
+ map (' n' , ' <leader>hS' , gs .stage_buffer , { desc = ' git [S]tage buffer' })
296
+ map (' n' , ' <leader>hu' , gs .undo_stage_hunk , { desc = ' git [u]ndo stage hunk' })
297
+ map (' n' , ' <leader>hR' , gs .reset_buffer , { desc = ' git [R]eset buffer' })
298
+ map (' n' , ' <leader>hp' , gs .preview_hunk , { desc = ' git [p]review hunk' })
299
+ map (' n' , ' <leader>hb' , function ()
300
+ gs .blame_line { full = false }
301
+ end , { desc = ' git [b]lame line' })
302
+ map (' n' , ' <leader>hd' , gs .diffthis , { desc = ' git [d]iff against index' })
303
+ map (' n' , ' <leader>hD' , function ()
304
+ gs .diffthis ' @'
305
+ end , { desc = ' git [D]iff against last commit' })
306
+ -- Toggles
307
+ map (' n' , ' <leader>tb' , gs .toggle_current_line_blame , { desc = ' [T]oggle git show [b]lame line' })
308
+ map (' n' , ' <leader>td' , gs .toggle_deleted , { desc = ' [T]oggle git show [d]eleted' })
309
+ end ,
258
310
},
259
311
},
260
312
@@ -286,7 +338,13 @@ require('lazy').setup({
286
338
[' <leader>r' ] = { name = ' [R]ename' , _ = ' which_key_ignore' },
287
339
[' <leader>s' ] = { name = ' [S]earch' , _ = ' which_key_ignore' },
288
340
[' <leader>w' ] = { name = ' [W]orkspace' , _ = ' which_key_ignore' },
341
+ [' <leader>h' ] = { name = ' Git [H]unk' , _ = ' which_key_ignore' },
342
+ [' <leader>t' ] = { name = ' [T]oggle' , _ = ' which_key_ignore' },
289
343
}
344
+ -- visual mode
345
+ require (' which-key' ).register ({
346
+ [' <leader>h' ] = { ' Git [H]unk' },
347
+ }, { mode = ' v' })
290
348
end ,
291
349
},
292
350
0 commit comments