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

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

gitsigns

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

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

1.gif

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


2.jpg

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

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

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

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


3.jpg

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

我們可以通過配置將我們要顯示的內容進行定義,也可以定義使用何種圖標來表示修改記錄。我們采用如下的配置

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

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

除了顯示以外它有一個重要的功能就是在各種修改狀態之間跳轉,例如調用 next_hunk來跳轉到下一個更改位置。并且它也集成了一些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來在各種修改之間進行跳轉。雖然偶爾也用用 diffthis來顯示差異,但這部分我更喜歡使用我接下來介紹的插件

4.gif

diffview

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

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


    DiffviewOpen

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

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

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

lazygit

lazygit是一個非常好用的git客戶端,可以方便的進行提交、回滾、查看變更等git操作。這里我不推薦什么插件,因為它本身已經很強大了,而且脫離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})

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

7.gif

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容