Skip to content

Commit

Permalink
major update: git and lsp
Browse files Browse the repository at this point in the history
  • Loading branch information
wongsingfo committed Jan 14, 2024
1 parent 40a725f commit e47444e
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 184 deletions.
5 changes: 2 additions & 3 deletions stow-dotfiles/nvim/.config/nvim/lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
{
"bufferline.nvim": { "branch": "main", "commit": "99f0932365b34e22549ff58e1bea388465d15e99" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"codeium.nvim": { "branch": "main", "commit": "445dca5efbbfa4c5fad7e5ffda46b1cb21028d2c" },
"diffview.nvim": { "branch": "main", "commit": "e91110d2a7f8e2f667666aba6ea089ff823f8748" },
"fidget.nvim": { "branch": "main", "commit": "90c22e47be057562ee9566bad313ad42d622c1d3" },
"git-blame.nvim": { "branch": "master", "commit": "1792125237260dc2a03ba57d31c39179e6049f07" },
"gitsigns.nvim": { "branch": "main", "commit": "5d73da785a3c05fd63ac31769079db05169a6ec7" },
"gp.nvim": { "branch": "main", "commit": "acccba7f7b80f0ada540a75332bb598d47392371" },
"gruvbox": { "branch": "master", "commit": "bf2885a95efdad7bd5e4794dd0213917770d79b7" },
"guard-collection": { "branch": "main", "commit": "41d4e036e350c44316c00eeaa651bb00ac24916f" },
"guard.nvim": { "branch": "main", "commit": "71a5e4861fc65dd6298bdb6e6d3027e81c134708" },
"indent-blankline.nvim": { "branch": "master", "commit": "258b5d899da7c681ce0e0225de32c593f3914c27" },
"lazy.nvim": { "branch": "main", "commit": "16603c6917435d8446f7357cb61095138a417085" },
"lightline.vim": { "branch": "master", "commit": "58c97bc21c6f657d3babdd4eefce7593e30e75ce" },
"lsp_signature.nvim": { "branch": "master", "commit": "58d4e810801da74c29313da86075d6aea537501f" },
"lspkind.nvim": { "branch": "master", "commit": "57610d5ab560c073c465d6faf0c19f200cb67e6e" },
"lspsaga.nvim": { "branch": "main", "commit": "335805d4f591f5bb71cabb6aa4dc58ccef8e8617" },
Expand All @@ -24,6 +22,7 @@
"nvim-osc52": { "branch": "main", "commit": "3e96035d62290183fe7a11418db2b254fcfcaee3" },
"nvim-treesitter": { "branch": "master", "commit": "4fd6d9dc175f367cdcec87630d8a3950ba7daef4" },
"nvim-treesitter-context": { "branch": "master", "commit": "6f8f788738b968f24a108ee599c5be0031f94f06" },
"playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" },
"plenary.nvim": { "branch": "master", "commit": "267282a9ce242bbb0c5dc31445b6d353bed978bb" },
"rnvimr": { "branch": "main", "commit": "5f0483d1c107ab1fe7e0af08cdf7900aa0dcb40e" },
"tcomment_vim": { "branch": "master", "commit": "b4930f9da28647e5417d462c341013f88184be7e" },
Expand Down
235 changes: 104 additions & 131 deletions stow-dotfiles/nvim/.config/nvim/lua/core/keybindings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,42 @@ local wk = require('which-key')
vim.g.mapleader = " "
vim.g.maplocalleader = ","

local map = vim.api.nvim_set_keymap
local keymap = vim.keymap.set

local opt = {
noremap = true,
silent = true,
}
local opt_expr = {
noremap = true,
silent = true,
expr = true,
};
local function keymapOptions(desc, opt)
local default = {
noremap = true,
silent = true,
nowait = true,
desc = desc,
}
if opt then
for k, v in pairs(opt) do
default[k] = v
end
end
return default
end

-- wk.register({
-- ["<c-n>"] = "NvimTreeToggle",
-- ["<c-p>"] = "Telescope find_files",
-- ["<c-space>"] = "Coc refresh",
-- ["<c-num>"] = "Switch BufferLine",
-- ["<c-s>"] = "Exit insert mode in neomux",
-- ["<c-v>"] = "Paste reg in terminal mode",
-- }, { prefix = '?' })

wk.register({
p = {
name = 'Telescope Diffview PasteCode',
d = ':DiffviewOpen',
D = ':DiffviewFileHistory paths',
c = ':DiffviewClose',
p = 'set paste',
},
n = {
name = 'NvimTree BufferLine',
Expand All @@ -45,138 +61,83 @@ wk.register({
}, { prefix = '<leader>' })

-- LSP Saga
-- https://github.com/nvimdev/lspsaga.nvim/blob/main/lua/lspsaga/command.lua
-- LSP finder - Find the symbol's definition
-- If there is no definition, it will instead be hidden
-- When you use an action in finder like "open vsplit",
-- you can use <C-t> to jump back
keymap("n", "gr", "<cmd>Lspsaga finder<CR>")

-- Code action
keymap({"n", "v"}, "<leader>gx", "<cmd>Lspsaga code_action<CR>")

-- Rename all occurrences of the hovered word for the entire file
-- keymap("n", "gr", "<cmd>Lspsaga rename<CR>")

-- Rename all occurrences of the hovered word for the selected files
keymap("n", "<leader>gr", "<cmd>Lspsaga rename ++project<CR>")

-- Peek definition
-- You can edit the file containing the definition in the floating window
-- It also supports open/vsplit/etc operations, do refer to "definition_action_keys"
-- It also supports tagstack
-- Use <C-t> to jump back
keymap("n", "gp", "<cmd>Lspsaga peek_definition<CR>")

-- Go to definition
keymap("n", "gd", "<cmd>Lspsaga goto_definition<CR>")

-- Peek type definition
-- You can edit the file containing the type definition in the floating window
-- It also supports open/vsplit/etc operations, do refer to "definition_action_keys"
-- It also supports tagstack
-- Use <C-t> to jump back
keymap("n", "gt", "<cmd>Lspsaga goto_type_definition<CR>")
-- keymap("n", "gt", "<cmd>Lspsaga peek_type_definition<CR>")

-- Go to type definition
-- keymap("n", "gt", "<cmd>Lspsaga goto_type_definition<CR>")

-- Show line diagnostics
-- You can pass argument ++unfocus to
-- unfocus the show_line_diagnostics floating window
-- keymap("n", "<leader>gl", "<cmd>Lspsaga show_line_diagnostics<CR>")

-- Show buffer diagnostics
keymap("n", "<leader>ge", "<cmd>Lspsaga show_buf_diagnostics<CR>")

-- Show workspace diagnostics
keymap("n", "<leader>gE", "<cmd>Lspsaga show_workspace_diagnostics<CR>")

-- Show cursor diagnostics
-- keymap("n", "<leader>gc", "<cmd>Lspsaga show_cursor_diagnostics<CR>")

-- Diagnostic jump
-- You can use <C-o> to jump back to your previous location
keymap("n", "[e", "<cmd>Lspsaga diagnostic_jump_prev<CR>")
keymap("n", "]e", "<cmd>Lspsaga diagnostic_jump_next<CR>")

-- Diagnostic jump with filters such as only jumping to an error
keymap("n", "[E", function()
require("lspsaga.diagnostic"):goto_prev({ severity = vim.diagnostic.severity.ERROR })
end)
end, keymapOptions("Prev Error"))
keymap("n", "]E", function()
require("lspsaga.diagnostic"):goto_next({ severity = vim.diagnostic.severity.ERROR })
end)

-- Toggle outline
end, keymapOptions("Next Error"))
keymap("n","<leader>go", "<cmd>Lspsaga outline<CR>")

-- Hover Doc
-- If there is no hover doc,
-- there will be a notification stating that
-- there is no information available.
-- To disable it just use ":Lspsaga hover_doc ++quiet"
-- Pressing the key twice will enter the hover window
keymap("n", "K", "<cmd>Lspsaga hover_doc<CR>")

-- If you want to keep the hover window in the top right hand corner,
-- you can pass the ++keep argument
-- Note that if you use hover with ++keep, pressing this key again will
-- close the hover window. If you want to jump to the hover window
-- you should use the wincmd command "<C-w>w"
keymap("n", "<leader>gK", "<cmd>Lspsaga hover_doc ++keep<CR>")

-- Call hierarchy
-- keymap("n", "<Leader>ci", "<cmd>Lspsaga incoming_calls<CR>")
-- keymap("n", "<Leader>co", "<cmd>Lspsaga outgoing_calls<CR>")
keymap({"n", "t"}, "<A-d>", "<cmd>Lspsaga term_toggle<CR>")

-- Format
keymap("n", "<leader>gf", "<cmd>GuardFmt<CR>")

-- Floating terminal
keymap({"n", "t"}, "<A-d>", "<cmd>Lspsaga term_toggle<CR>")

keymap("n", "<leader>gs", "<cmd>ClangdSwitchSourceHeader<CR>")

-- Telescope
map('n', '<c-p>', '<cmd>Telescope buffers<CR>', opt)
map('n', '<leader>pf', '<cmd>Telescope find_files<CR>', opt)
map('n', '<leader>pb', '<cmd>Telescope buffers<CR>', opt)
map('n', '<leader>pg', '<cmd>Telescope live_grep<CR>', opt)
map('n', '<leader>pw', '<cmd>Telescope grep_string<CR>', opt)
map('n', '<leader>ps', '<cmd>Telescope lsp_document_symbols<CR>', opt)
map('n', '<leader>pt', '<cmd>Telescope help_tags<CR>', opt)
keymap('n', '<c-p>', '<cmd>Telescope buffers<CR>', opt)
-- keymap('n', '<leader>pb', '<cmd>Telescope buffers<CR>', opt)
keymap('n', '<leader>pf', '<cmd>Telescope find_files<CR>', opt)
keymap('n', '<leader>pg', '<cmd>Telescope live_grep<CR>', opt)
keymap('n', '<leader>pw', '<cmd>Telescope grep_string<CR>', opt)
keymap('n', '<leader>ps', '<cmd>Telescope lsp_document_symbols<CR>', opt)
keymap('n', '<leader>pt', '<cmd>Telescope help_tags<CR>', opt)
-- Diffview
map('n', '<leader>pd', '<cmd>DiffviewOpen<CR>', opt)
map('n', '<leader>pD', '<cmd>DiffviewFileHistory<cr>', opt)
map('n', '<leader>pr', '<cmd>DiffviewRefresh<cr>', opt)
map('n', '<leader>pc', '<cmd>DiffviewClose<cr>', opt)
-- map('n', '<leader>pd', '<cmd>DiffviewOpen<CR>', opt)
-- map('n', '<leader>pD', '<cmd>DiffviewFileHistory<cr>', opt)
-- map('n', '<leader>pr', '<cmd>DiffviewRefresh<cr>', opt)
-- map('n', '<leader>pc', '<cmd>DiffviewClose<cr>', opt)
-- NvimTree
-- map('n', '<c-n>', '<cmd>NvimTreeToggle<CR>', opt)
-- map('n', '<leader>nr', '<cmd>NvimTreeRefresh<CR>', opt)
-- map('n', '<leader>nf', '<cmd>NvimTreeFindFile<CR>', opt)
-- Vista
-- map('n', '<leader>vi', '<cmd>Vista!!<CR>', opt)
-- BufferLine
map('n', '<leader>nn', '<cmd>BufferLineCycleNext<cr>', opt)
map('n', '<leader>np', '<cmd>BufferLineCyclePrev<cr>', opt)
map('n', '<leader>nl', '<cmd>BufferLineMoveNext<cr>', opt)
map('n', '<leader>nh', '<cmd>BufferLineMovePrev<cr>', opt)
map('n', '<leader>nb', '<cmd>BufferLinePick<cr>', opt)
map('n', '<leader>nc', '<cmd>BufferLinePickClose<cr>', opt)
for i = 1, 9 do
map('n', '<leader>n'..i, '<cmd>BufferLineGoToBuffer '..i..'<cr>', opt)
end
-- map('n', '<leader>nn', '<cmd>BufferLineCycleNext<cr>', opt)
-- map('n', '<leader>np', '<cmd>BufferLineCyclePrev<cr>', opt)
-- map('n', '<leader>nl', '<cmd>BufferLineMoveNext<cr>', opt)
-- map('n', '<leader>nh', '<cmd>BufferLineMovePrev<cr>', opt)
-- map('n', '<leader>nb', '<cmd>BufferLinePick<cr>', opt)
-- map('n', '<leader>nc', '<cmd>BufferLinePickClose<cr>', opt)
-- for i = 1, 9 do
-- map('n', '<leader>n'..i, '<cmd>BufferLineGoToBuffer '..i..'<cr>', opt)
-- end
-- Tab naviagtion
-- use gt and gT to navigate tabs
-- use <n>gt to go to the n-th tab
map('n', '<leader>tn', '<cmd>tabnew<cr>', opt)
map('n', '<leader>tc', '<cmd>tabclose<cr>', opt)
keymap('n', '<leader>tn', '<cmd>tabnew<cr>', opt)
keymap('n', '<leader>tc', '<cmd>tabclose<cr>', opt)
-- Window resizer
vim.g.winresizer_start_key = '<leader>ww'
-- vim.g.winresizer_start_key = '<leader>ww'
-- Neomux
vim.cmd[[
:tnoremap <expr> <C-V> '<C-\><C-N>"'.nr2char(getchar()).'pi'
]]
-- vim.cmd[[
-- :tnoremap <expr> <C-V> '<C-\><C-N>"'.nr2char(getchar()).'pi'
-- ]]
-- Hop
-- map('', 'f', "<cmd>lua require'hop'.hint_char1({ direction = require'hop.hint'.HintDirection.AFTER_CURSOR, current_line_only = true })<cr>", {})
-- map('', 'F', "<cmd>lua require'hop'.hint_char1({ direction = require'hop.hint'.HintDirection.BEFORE_CURSOR, current_line_only = true })<cr>", {})
Expand All @@ -185,54 +146,66 @@ vim.cmd[[
-- map('', 's', "<cmd>HopChar1MW<cr>", opt)
-- map('o', 'Z', "<cmd>HopChar1MW<cr>", opt)
-- paste code
map('n', '<leader>pp', '<cmd>set paste<cr>"*p<cmd>set nopaste<cr>', opt)
-- Lazygit
-- https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md
-- map('n', '<leader>lg', '<cmd>LazyGit<cr>', opt)

-- Rnvimr (ranger)
map('n', '<leader>ra', '<cmd>RnvimrToggle<cr>', opt)
keymap('n', '<leader>ra', '<cmd>RnvimrToggle<cr>', keymapOptions("Run Ranger"))

-- GitBlame
map('n', '<leader>gb', '<cmd>GitBlameToggle<cr>', opt)

wk.register({
["<c-n>"] = "NvimTreeToggle",
["<c-p>"] = "Telescope find_files",
["<c-space>"] = "Coc refresh",
["<c-num>"] = "Switch BufferLine",
["<c-s>"] = "Exit insert mode in neomux",
["<c-v>"] = "Paste reg in terminal mode",
}, { prefix = '?' })
keymap('n', '<leader>gb', '<cmd>GitBlameToggle<cr>', keymapOptions("Toggle GitBlame"))

-- Copy to clipboard
vim.keymap.set('n', '<leader>c', require('osc52').copy_operator, {expr = true})
vim.keymap.set('n', '<leader>cc', '<leader>c_', {remap = true})
vim.keymap.set('v', '<leader>c', require('osc52').copy_visual)

map('n', '<leader>tm', '<cmd>lua toggle_textmode()<cr>', opt)
function toggle_textmode()
local osc52 = require('osc52')
keymap('n', '<leader>c', osc52.copy_operator, {expr = true})
keymap('n', '<leader>cc', '<leader>c_', {remap = true})
keymap('v', '<leader>c', osc52.copy_visual)
keymap('n', '<leader>pp', '<cmd>set paste<cr>"*p<cmd>set nopaste<cr>', keymapOptions("Paste"))

-- TextMode
keymap('n', '<leader>tm', function()
local enabled = not vim.wo.spell
vim.wo.wrap = enabled
vim.wo.spell = enabled
vim.wo.linebreak = enabled
end

local function keymapOptions(desc)
return {
noremap = true,
silent = true,
nowait = true,
desc = "GPT prompt " .. desc,
}
end
vim.keymap.set({"n", "i"}, "<C-g>c", "<cmd>GpChatNew<cr>", keymapOptions("New Chat"))
vim.keymap.set({"n", "i"}, "<C-g>f", "<cmd>GpChatFinder<cr>", keymapOptions("Chat Finder"))
vim.keymap.set({"n", "i"}, "<C-g>t", "<cmd>GpChatToggle<cr>", keymapOptions("Toggle Chat"))
vim.keymap.set({"n", "i"}, "<C-g>r", "<cmd>GpRewrite<cr>", keymapOptions("Inline Rewrite"))
vim.keymap.set({"n", "i"}, "<C-g>a", "<cmd>GpAppend<cr>", keymapOptions("Append (after)"))
vim.keymap.set({"n", "i"}, "<C-g>b", "<cmd>GpPrepend<cr>", keymapOptions("Prepend (before)"))
vim.keymap.set("v", "<C-g>r", ":<C-u>'<,'>GpRewrite<cr>", keymapOptions("Visual Rewrite"))
vim.keymap.set("v", "<C-g>a", ":<C-u>'<,'>GpAppend<cr>", keymapOptions("Visual Append (after)"))
vim.keymap.set("v", "<C-g>b", ":<C-u>'<,'>GpPrepend<cr>", keymapOptions("Visual Prepend (before)"))
vim.keymap.set("v", "<C-g>i", ":<C-u>'<,'>GpImplement<cr>", keymapOptions("Implement selection"))
end, keymapOptions("Toggle TextMode"))

-- ChatGPT
keymap({"n", "i"}, "<C-g>c", "<cmd>GpChatNew<cr>", keymapOptions("New Chat"))
keymap({"n", "i"}, "<C-g>f", "<cmd>GpChatFinder<cr>", keymapOptions("Chat Finder"))
keymap({"n", "i"}, "<C-g>t", "<cmd>GpChatToggle<cr>", keymapOptions("Toggle Chat"))
keymap({"n", "i"}, "<C-g>r", "<cmd>GpRewrite<cr>", keymapOptions("Inline Rewrite"))
keymap({"n", "i"}, "<C-g>a", "<cmd>GpAppend<cr>", keymapOptions("Append (after)"))
keymap({"n", "i"}, "<C-g>b", "<cmd>GpPrepend<cr>", keymapOptions("Prepend (before)"))
keymap("v", "<C-g>r", ":<C-u>'<,'>GpRewrite<cr>", keymapOptions("Visual Rewrite"))
keymap("v", "<C-g>a", ":<C-u>'<,'>GpAppend<cr>", keymapOptions("Visual Append (after)"))
keymap("v", "<C-g>b", ":<C-u>'<,'>GpPrepend<cr>", keymapOptions("Visual Prepend (before)"))
keymap("v", "<C-g>i", ":<C-u>'<,'>GpImplement<cr>", keymapOptions("Implement selection"))

-- Git
local gs=require('gitsigns')
keymap('n', ']c', function()
if vim.wo.diff then return ']c' end
vim.schedule(function() gs.next_hunk() end)
return '<Ignore>'
end, keymapOptions("Next Hunk", {expr=true}))
keymap('n', '[c', function()
if vim.wo.diff then return '[c' end
vim.schedule(function() gs.prev_hunk() end)
return '<Ignore>'
end, keymapOptions("Prev Hunk", {expr=true}))
keymap('n', '<leader>hs', gs.stage_hunk, keymapOptions("Stage Hunk"))
keymap('n', '<leader>hr', gs.reset_hunk, keymapOptions("Reset Hunk"))
keymap('v', '<leader>hs', function() gs.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end, keymapOptions("Stage Hunk"))
keymap('v', '<leader>hr', function() gs.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end, keymapOptions("Reset Hunk"))
keymap('n', '<leader>hS', gs.stage_buffer, keymapOptions("Stage Buffer"))
keymap('n', '<leader>hu', gs.undo_stage_hunk, keymapOptions("Undo Stage Hunk"))
keymap('n', '<leader>hR', gs.reset_buffer, keymapOptions("Reset Buffer"))
keymap('n', '<leader>hp', gs.preview_hunk, keymapOptions("Preview Hunk"))
keymap('n', '<leader>hb', function() gs.blame_line{full=true} end, keymapOptions("Blame Line"))
keymap('n', '<leader>hB', gs.toggle_current_line_blame, keymapOptions("Toggle Blame"))
keymap('n', '<leader>hd', gs.diffthis, keymapOptions("Diff This"))
keymap('n', '<leader>hD', function() gs.diffthis('HEAD') end, keymapOptions("Diff HEAD~"))
keymap('n', '<leader>hP', gs.toggle_deleted, keymapOptions("Toggle Deleted"))
keymap({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
Loading

0 comments on commit e47444e

Please sign in to comment.