@@ -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.
0 commit comments