從零開始配置vim(31)——git 配置

很抱歉又拖更了這么久了,在這個新公司我想快速度過試用期,所以大部分的精力主要花在日常工作上面。但是這個系列還是得更新下去,平時只能抽有限的業(yè)余時間來準備。這就導致我寫這些文章就慢了一些。
廢話不多說,咱們正式開始有關(guān)git相關(guān)的配置。這些配置都是根據(jù)我自身使用習慣來定義的,不一定符合各位的習慣,各位可以根據(jù)自身的習慣來調(diào)整

gitsigns

第一個要推薦的插件是 gitsigns。就像它的名字一樣,該插件可以將最近的更改以標簽的形式展現(xiàn)出來方便我們查看。我們可以使用這樣的代碼進行安裝 use {'lewis6991/gitsigns.nvim' }。需要注意最新的版本需要 neovim 的版本在0.7 以上。

安裝完成之后我們通過配置 require('gitsigns').setup()來使用它。這樣我們就可以通過 Gitsigns toggle_signs來打開或者關(guān)閉符號顯示了。

1.gif

除了采用最基本的符號顯示以外,它還可以對改變位置的行號進行標記以及高亮顯示變更的行。這兩個功能可以通過 Gitsigns toggle_numl和 Gitsigns toggle_linel來打開,打開之后顯示如下:


2.jpg

從圖中可以看到,更改行行號被用綠色顯示了出來并且更改行進行了高亮顯示

另外它還有其他的顯示效果:
它主要的一些顯示功能主要有下面幾個:

  • toggle_signs: 顯示變更記錄
  • toggle_numl: 顯示變更行號
  • toggle_linel:高亮變更的行
  • toggle_delete: 顯示被刪除的行,以紅色背景高亮顯示
  • toggle_word_diff: 在兩行分別顯示修改前和修改后的內(nèi)容
  • toggle_current_line_blame: 在對應行后面顯示提交記錄

我們將所有的這些功能都打開將得到這么一個效果


3.jpg

是不是看著有點亂?這是我修改了一處的,一旦修改多了看著會更混亂。所以我自己的經(jīng)驗告訴我在這個buffer里面最好是只打開 signsnuml、linelcurrent_line_blame的功能,其他的都關(guān)掉。也就是在當前buffer中只顯示現(xiàn)在的代碼,然后輔助以簡單的符號來顯示哪行是新加的,哪行被刪除了,哪行被修改了,至于修改前是什么樣子的,我可以通過其他方式來查閱。所有內(nèi)容都在一個buffer中顯示會比較亂,不利于閱讀代碼。

我們可以通過配置將我們要顯示的內(nè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
    },
})

其中大部分都是官方給出的默認配置,我只是在此基礎(chǔ)之上改了 signs在各種狀態(tài)下顯示的圖標,以及顯示哪些內(nèi)容。主要是使用 + 來表示新增、| 來表示修改、- 表示刪除。

除了顯示以外它有一個重要的功能就是在各種修改狀態(tài)之間跳轉(zhuǎn),例如調(diào)用 next_hunk來跳轉(zhuǎn)到下一個更改位置。并且它也集成了一些git的操作。我們對常用的操作定義一些快捷鍵

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

這里是我將官方給出的配置直接粘貼了過來,這堆快捷鍵定義的操作中我最常用的就是 next_hunkprev_hunk來在各種修改之間進行跳轉(zhuǎn)。雖然偶爾也用用 diffthis來顯示差異,但這部分我更喜歡使用我接下來介紹的插件

4.gif

diffview

這個插件從名字上看就知道是專門用來查看版本差異的插件。與前面介紹的 gitsigns插件相比它有下面幾個優(yōu)點:

  1. 它是專門用來顯示差異的,與gitsigns相比,顯示的更加明顯
  2. 它可以在文件樹中顯示有變更的文件
  3. 它可以做到任意版本之間的差異對比
  4. 它可以顯示單個文件的版本提交記錄


    DiffviewOpen

它還有另外的功能,可以由各位小伙伴根據(jù)官方文檔自行了解。
它的使用方式如下:

  • :DiffviewOpen顯示當前與上一個版本之間的差異
  • :DiffviewOpen + 版本號 可以顯示當期與某一個特定版本的差異,例如 :DiffviewOpen HEAD~2或者:DiffviewOpen 906ddac317來查看版本差異
    :DiffviewFileHistory + 文件名 來查看某個文件的版本差異
    DiffviewFileHistory

因為它比較簡單,具體的用法就不在這里演示了。
關(guān)于它的配置,我自己認為平時很少使用,而且默認的配置已經(jīng)夠用了,也不太需要花精力為它優(yōu)化快捷鍵了。

lazygit

lazygit是一個非常好用的git客戶端,可以方便的進行提交、回滾、查看變更等git操作。這里我不推薦什么插件,因為它本身已經(jīng)很強大了,而且脫離vim它也可以很好的工作。想來想去只有配置一個快捷鍵來快速打開 lazygit 的終端

不知道各位小伙伴是否還記得之間介紹的 toggleterm 插件,我們將要依賴它來快速啟動

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})

通過這樣簡單的配置我們已經(jīng)可以使用 <leader>lg來快速啟動 lazygit的客戶端了。

7.gif

至此我們關(guān)于git的配置就完成了。一般我的使用習慣是使用 gitsigns來在更改中進行跳轉(zhuǎn),用于提交前或者合并分支前的代碼審查,做到提交和合并都心中有數(shù)。在發(fā)生bug要回溯代碼并且查看當前與沒有問題的版本之間的差異會用到 diffview插件。在進行提交、合并、回溯等git相關(guān)操作時會使用到 lazygit。各位小伙伴也可以根據(jù)自己的使用習慣來定制這一部分的配置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容