很抱歉又拖更了這么久了垃瞧,在這個(gè)新公司我想快速度過(guò)試用期酝锅,所以大部分的精力主要花在日常工作上面到涂。但是這個(gè)系列還是得更新下去,平時(shí)只能抽有限的業(yè)余時(shí)間來(lái)準(zhǔn)備涤妒。這就導(dǎo)致我寫這些文章就慢了一些单雾。
廢話不多說(shuō),咱們正式開始有關(guān)git相關(guān)的配置她紫。這些配置都是根據(jù)我自身使用習(xí)慣來(lái)定義的硅堆,不一定符合各位的習(xí)慣,各位可以根據(jù)自身的習(xí)慣來(lái)調(diào)整
gitsigns
第一個(gè)要推薦的插件是 gitsigns
贿讹。就像它的名字一樣渐逃,該插件可以將最近的更改以標(biāo)簽的形式展現(xiàn)出來(lái)方便我們查看。我們可以使用這樣的代碼進(jìn)行安裝 use {'lewis6991/gitsigns.nvim' }
民褂。需要注意最新的版本需要 neovim
的版本在0.7
以上茄菊。
安裝完成之后我們通過(guò)配置 require('gitsigns').setup()
來(lái)使用它疯潭。這樣我們就可以通過(guò) Gitsigns toggle_signs
來(lái)打開或者關(guān)閉符號(hào)顯示了。
除了采用最基本的符號(hào)顯示以外面殖,它還可以對(duì)改變位置的行號(hào)進(jìn)行標(biāo)記以及高亮顯示變更的行竖哩。這兩個(gè)功能可以通過(guò) Gitsigns toggle_numl和 Gitsigns toggle_linel來(lái)打開,打開之后顯示如下:
從圖中可以看到脊僚,更改行行號(hào)被用綠色顯示了出來(lái)并且更改行進(jìn)行了高亮顯示
另外它還有其他的顯示效果:
它主要的一些顯示功能主要有下面幾個(gè):
- toggle_signs: 顯示變更記錄
- toggle_numl: 顯示變更行號(hào)
- toggle_linel:高亮變更的行
- toggle_delete: 顯示被刪除的行相叁,以紅色背景高亮顯示
- toggle_word_diff: 在兩行分別顯示修改前和修改后的內(nèi)容
- toggle_current_line_blame: 在對(duì)應(yīng)行后面顯示提交記錄
我們將所有的這些功能都打開將得到這么一個(gè)效果
是不是看著有點(diǎn)亂?這是我修改了一處的吃挑,一旦修改多了看著會(huì)更混亂钝荡。所以我自己的經(jīng)驗(yàn)告訴我在這個(gè)buffer里面最好是只打開 signs
街立、numl
舶衬、linel
、current_line_blame
的功能赎离,其他的都關(guān)掉逛犹。也就是在當(dāng)前buffer
中只顯示現(xiàn)在的代碼,然后輔助以簡(jiǎn)單的符號(hào)來(lái)顯示哪行是新加的梁剔,哪行被刪除了虽画,哪行被修改了,至于修改前是什么樣子的荣病,我可以通過(guò)其他方式來(lái)查閱码撰。所有內(nèi)容都在一個(gè)buffer
中顯示會(huì)比較亂,不利于閱讀代碼个盆。
我們可以通過(guò)配置將我們要顯示的內(nèi)容進(jìn)行定義脖岛,也可以定義使用何種圖標(biāo)來(lái)表示修改記錄。我們采用如下的配置
gitsigns.setup({
signs = {
add = {hl = 'GitSignsAdd' , text = '+', numhl='GitSignsAddNr' , linehl='GitSignsAddLn'},
change = {hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
delete = {hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
topdelete = {hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
untracked = {hl = 'GitSignsAdd', text = '+', numhl='GitSignsAddNr' , linehl='GitSignsAddLn'},
changedelete = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
},
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
numhl = true, -- Toggle with `:Gitsigns toggle_numhl`
linehl = true, -- Toggle with `:Gitsigns toggle_linehl`
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
watch_gitdir = {
interval = 1000,
follow_files = true
},
attach_to_untracked = true,
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
current_line_blame_opts = {
virt_text = true,
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
delay = 1000,
ignore_whitespace = false,
},
current_line_blame_formatter = '<author>, <author_time:%Y-%m-%d> - <summary>',
sign_priority = 6,
update_debounce = 100,
status_formatter = nil, -- Use default
max_file_length = 40000, -- Disable if file is longer than this (in lines)
preview_config = {
-- Options passed to nvim_open_win
border = 'single',
style = 'minimal',
relative = 'cursor',
row = 0,
col = 1
},
yadm = {
enable = false
},
})
其中大部分都是官方給出的默認(rèn)配置颊亮,我只是在此基礎(chǔ)之上改了 signs在各種狀態(tài)下顯示的圖標(biāo)柴梆,以及顯示哪些內(nèi)容。主要是使用 +
來(lái)表示新增终惑、|
來(lái)表示修改绍在、-
表示刪除。
除了顯示以外它有一個(gè)重要的功能就是在各種修改狀態(tài)之間跳轉(zhuǎn)雹有,例如調(diào)用 next_hunk
來(lái)跳轉(zhuǎn)到下一個(gè)更改位置偿渡。并且它也集成了一些git的操作。我們對(duì)常用的操作定義一些快捷鍵
on_attach = function()
vim.api.nvim_set_keymap("n", "<leader>gj", "<cmd>Gitsigns next_hunk<CR>", {silent = true, noremap = true})
vim.api.nvim_set_keymap("n", "<leader>gk", "<Cmd>Gitsigns prev_hhunk<CR>", {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hs', ':Gitsigns stage_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('v', '<leader>hs', ':Gitsigns stage_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hr', ':Gitsigns reset_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('v', '<leader>hr', ':Gitsigns reset_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hS', '<cmd>Gitsigns stage_buffer<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hu', '<cmd>Gitsigns undo_stage_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hR', '<cmd>Gitsigns reset_buffer<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hp', '<cmd>Gitsigns preview_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hb', '<cmd>lua require"gitsigns".blame_line{full=true}<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>tb', '<cmd>Gitsigns toggle_current_line_blame<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hd', '<cmd>Gitsigns diffthis<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>hD', '<cmd>lua require"gitsigns".diffthis("~")<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('n', '<leader>td', '<cmd>Gitsigns toggle_deleted<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('o', 'ih', ':<C-U>Gitsigns select_hunk<CR>', {silent = true, noremap = true})
vim.api.nvim_set_keymap('x', 'ih', ':<C-U>Gitsigns select_hunk<CR>', {silent = true, noremap = true})
end
這里是我將官方給出的配置直接粘貼了過(guò)來(lái)霸奕,這堆快捷鍵定義的操作中我最常用的就是 next_hunk
和 prev_hunk
來(lái)在各種修改之間進(jìn)行跳轉(zhuǎn)卸察。雖然偶爾也用用 diffthis
來(lái)顯示差異,但這部分我更喜歡使用我接下來(lái)介紹的插件
diffview
這個(gè)插件從名字上看就知道是專門用來(lái)查看版本差異的插件铅祸。與前面介紹的 gitsigns插件相比它有下面幾個(gè)優(yōu)點(diǎn):
- 它是專門用來(lái)顯示差異的坑质,與gitsigns相比合武,顯示的更加明顯
- 它可以在文件樹中顯示有變更的文件
- 它可以做到任意版本之間的差異對(duì)比
-
它可以顯示單個(gè)文件的版本提交記錄
它還有另外的功能,可以由各位小伙伴根據(jù)官方文檔自行了解涡扼。
它的使用方式如下:
-
:DiffviewOpen
顯示當(dāng)前與上一個(gè)版本之間的差異 -
:DiffviewOpen + 版本號(hào)
可以顯示當(dāng)期與某一個(gè)特定版本的差異稼跳,例如:DiffviewOpen HEAD~2
或者:DiffviewOpen 906ddac317
來(lái)查看版本差異
●:DiffviewFileHistory + 文件名
來(lái)查看某個(gè)文件的版本差異
因?yàn)樗容^簡(jiǎn)單,具體的用法就不在這里演示了吃沪。
關(guān)于它的配置汤善,我自己認(rèn)為平時(shí)很少使用,而且默認(rèn)的配置已經(jīng)夠用了票彪,也不太需要花精力為它優(yōu)化快捷鍵了红淡。
lazygit
lazygit
是一個(gè)非常好用的git
客戶端,可以方便的進(jìn)行提交降铸、回滾在旱、查看變更等git
操作。這里我不推薦什么插件推掸,因?yàn)樗旧硪呀?jīng)很強(qiáng)大了桶蝎,而且脫離vim
它也可以很好的工作。想來(lái)想去只有配置一個(gè)快捷鍵來(lái)快速打開 lazygit
的終端
不知道各位小伙伴是否還記得之間介紹的 toggleterm
插件谅畅,我們將要依賴它來(lái)快速啟動(dòng)
local lazygitterm = Terminal:new({
cmd = 'lazygit',
direction = 'float'
})
function lazygit_toggle()
lazygitterm:toggle()
end
vim.api.nvim_set_keymap("n", "<leader>lg", "<Cmd>lua lazygit_toggle()<CR>", {noremap = true, silent = true})
通過(guò)這樣簡(jiǎn)單的配置我們已經(jīng)可以使用 <leader>lg
來(lái)快速啟動(dòng) lazygit
的客戶端了登渣。
至此我們關(guān)于git的配置就完成了。一般我的使用習(xí)慣是使用 gitsigns來(lái)在更改中進(jìn)行跳轉(zhuǎn)毡泻,用于提交前或者合并分支前的代碼審查胜茧,做到提交和合并都心中有數(shù)。在發(fā)生bug要回溯代碼并且查看當(dāng)前與沒有問(wèn)題的版本之間的差異會(huì)用到 diffview插件仇味。在進(jìn)行提交呻顽、合并、回溯等git相關(guān)操作時(shí)會(huì)使用到 lazygit邪铲。各位小伙伴也可以根據(jù)自己的使用習(xí)慣來(lái)定制這一部分的配置芬位。