From ff13fce3739ef8c09d08a48b058363d2f7fb6c11 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 9 Jul 2024 22:33:50 +0300 Subject: Neovim: almost finished with git integration, did minor unrelated tweaks --- .config/nvim/lua/custom/git.lua | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .config/nvim/lua/custom/git.lua (limited to '.config/nvim/lua/custom/git.lua') diff --git a/.config/nvim/lua/custom/git.lua b/.config/nvim/lua/custom/git.lua new file mode 100644 index 0000000..b30deb5 --- /dev/null +++ b/.config/nvim/lua/custom/git.lua @@ -0,0 +1,62 @@ +local set = vim.keymap.set +local gitsigns = require('gitsigns') +gitsigns.setup() +require('neogit').setup({}) +require('octo').setup() +require('diffview').setup({ + enhanced_diff_hl = true, + default = { winbar_info = true }, + keymaps = { + view = { + { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, + }, + file_panel = { + { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, + }, + file_history_panel = { + { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, + }, + }, +}) + +vim.treesitter.language.register('markdown', 'octo') +-- Autocomplete for @ (user mention) and # (issue) +-- Works in GitHub issues/PRs (for octo.nvim) +vim.api.nvim_create_autocmd('FileType', { + pattern = 'octo', + callback = function() + vim.keymap.set('i', '@', '@', { silent = true, buffer = true }) + vim.keymap.set('i', '#', '#', { silent = true, buffer = true }) + end, +}) + +-- GitHub keymaps +set('n', 'gi', 'Octo issue search', { desc = '[G]ithub [I]ssues' }) +set('n', 'pr', 'Octo issue search', { desc = 'Github [PR]s' }) + +-- Git keymaps +set('n', 'gb', gitsigns.toggle_current_line_blame, { desc = '[G]it [B]lame Line' }) +set('n', 'gD', gitsigns.toggle_deleted, { desc = '[G]it [D]eleted' }) +set('n', 'gd', 'DiffviewOpen', { desc = '[G]it [D]iff' }) +set('n', 'gl', 'DiffviewFileHistory', { desc = '[G]it [L]og' }) +set('n', 'gs', 'Neogit', { desc = '[G]it [S]tatus' }) +set('n', 'ga', 'TODO:', { desc = '[G]it [A]dd' }) +set('n', 'gc', 'TODO:', { desc = '[G]it [C]ommit' }) +set('n', 'gp', 'TODO:', { desc = '[G]it [P]ush' }) +set('n', 'gP', 'TODO:', { desc = '[G]it [P]ull' }) + +-- Hunk Keymaps +local function stage_visual_chunk() + gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) +end +local function reset_visual_chunk() + gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) +end +set('n', 'hp', gitsigns.preview_hunk, { desc = '[H]unk [P]review' }) +set('n', 'hs', gitsigns.stage_hunk, { desc = '[H]unk [S]tage' }) +set('n', 'hr', gitsigns.reset_hunk, { desc = '[H]unk [R]eset' }) +set('v', 'hs', stage_visual_chunk, { desc = '[H]unk [S]tage' }) +set('v', 'hr', reset_visual_chunk, { desc = '[H]unk [S]tage' }) +set('n', 'hS', gitsigns.stage_buffer, { desc = '[S]tage Buffer' }) +set('n', 'hR', gitsigns.reset_buffer, { desc = '[R]eset Buffer' }) +set('n', 'hu', gitsigns.undo_stage_hunk, { desc = '[H]unk [U]ndo' }) -- cgit v1.3.1