很抱歉又拖更了这么久了,在这个新公司我想快速度过试用期,所以大部分的精力主要花在日常工作上面。但是这个系列还是得更新下去,平时只能抽有限的业余时间来准备。这就导致我写这些文章就慢了一些。

废话不多说,咱们正式开始有关git相关的配置。这些配置都是根据我自身使用习惯来定义的,不一定符合各位的习惯,各位可以根据自身的习惯来调整

gitsigns

第一个要推荐的插件是 gitsigns。就像它的名字一样,该插件可以将最近的更改以标签的形式展现出来方便我们查看。我们可以使用这样的代码进行安装 use {'lewis6991/gitsigns.nvim' }。需要注意最新的版本需要 neovim 的版本在0.7 以上。

安装完成之后我们通过配置 require('gitsigns').setup()来使用它。这样我们就可以通过 Gitsigns toggle_signs来打开或者关闭符号显示了。



除了采用最基本的符号显示以外,它还可以对改变位置的行号进行标记以及高亮显示变更的行。这两个功能可以通过 Gitsigns toggle_numl和 Gitsigns toggle_linel来打开,打开之后显示如下:



从图中可以看到,更改行行号被用绿色显示了出来并且更改行进行了高亮显示

另外它还有其他的显示效果:

它主要的一些显示功能主要有下面几个:

  • toggle_signs: 显示变更记录
  • toggle_numl: 显示变更行号
  • toggle_linel:高亮变更的行
  • toggle_delete: 显示被删除的行,以红色背景高亮显示
  • toggle_word_diff: 在两行分别显示修改前和修改后的内容
  • toggle_current_line_blame: 在对应行后面显示提交记录

我们将所有的这些功能都打开将得到这么一个效果

是不是看着有点乱?这是我修改了一处的,一旦修改多了看着会更混乱。所以我自己的经验告诉我在这个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来显示差异,但这部分我更喜欢使用我接下来介绍的插件

diffview

这个插件从名字上看就知道是专门用来查看版本差异的插件。与前面介绍的 gitsigns插件相比它有下面几个优点:

  1. 它是专门用来显示差异的,与gitsigns相比,显示的更加明显
  2. 它可以在文件树中显示有变更的文件
  3. 它可以做到任意版本之间的差异对比
  4. 它可以显示单个文件的版本提交记录

它还有另外的功能,可以由各位小伙伴根据官方文档自行了解。

它的使用方式如下:

  • :DiffviewOpen显示当前与上一个版本之间的差异
  • :DiffviewOpen + 版本号 可以显示当期与某一个特定版本的差异,例如 :DiffviewOpen HEAD~2或者:DiffviewOpen 906ddac317来查看版本差异

    :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的客户端了。



至此我们关于git的配置就完成了。一般我的使用习惯是使用 gitsigns来在更改中进行跳转,用于提交前或者合并分支前的代码审查,做到提交和合并都心中有数。在发生bug要回溯代码并且查看当前与没有问题的版本之间的差异会用到 diffview插件。在进行提交、合并、回溯等git相关操作时会使用到 lazygit。各位小伙伴也可以根据自己的使用习惯来定制这一部分的配置。

从零开始配置vim(31)——git 配置的更多相关文章

  1. Windows系统Git配置教程(Git配置git config)

    Windows系统Git配置教程(Git配置git config)   在很多Git配置教程中,多是安装完毕后就告诉大家要配置用户名和邮箱,但是这个配置是保存在哪里呢,配置后面的参数有什么不同呢,下面 ...

  2. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

  3. vim + oh-my-zsh + git搭建开发环境

    vim + oh-my-zsh + git配置开发环境 vim配置 安装vundle 使用vundle作为插件管理器,使用前先安装vundle mkdir -p ~/.vim/bundle git c ...

  4. vim + ctags + taglist配置和使用

    vim +ctags + taglist ,ctags+cscope 安装配置和使用 内容:VIM下ctags和taglist的安装配置方法:一键安装 ctags和cscope的方法 :vim语法高亮 ...

  5. Git使用指南(1)——Git配置命令

    配置用户信息 git config --global user.name bongxin git config --global user.email bongxin@yeah.net 配置文本编辑器 ...

  6. Git 配置

    在 windows 上安装完 Git 会右键菜单中看到 Git 的快捷打开选项, 点 Git Bash Here 就可以在当前目录下打开 Git 的命令行 Git shell,初次使用 Git 先配置 ...

  7. mac配置vim-go

    基本的设置信息(参考网址:http://hessian.cn/p/1026.html): "还是配置/.vimrc文件. syn on "语法支持 set laststatus=2 ...

  8. 1 起步-Pro Git---VCS比较、git基本原理、git配置

    本地版本控制系统 集中化的版本控制系统 诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务 ...

  9. CentOS 7 学习(四)Git配置(一)

    CentOS 7 学习(四)Git配置(一) 1.对于版本管理系统,目前常用的是Subverion和Git,Subversion是集中式版本管理系统中最好的,所有人的代码都要提交到服务器上,如果要知道 ...

  10. Mac 下升级 vim 并自己配置 vim 的过程

    1.升级 vim 我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim -- ...

随机推荐

  1. 动作捕捉用于验证芭蕾舞动作对脑瘫儿童的作用 NOKOV度量动作捕捉

    下肢杠杆力臂功能障碍(Lever Arm Dysfunction,LAD)是常见的导致脑瘫儿童步态异常的原因,如髋内旋.股骨和胫骨之间的旋转畸形以及足的内外翻畸形等,且都与年龄的增长呈正相关.   图 ...

  2. 使用触发器和C#程序实现数据同步

    项目中用到了Quartz,也算是Quartz的一个示例. 源库创建数据同步表SYNC_DATA: CREATE TABLE SYNC_DATA( ID VARCHAR2(36) NOT NULL, T ...

  3. 在Windows上D盘上安装Docker

    Reference https://www.willh.cn/articles/2022/07/13/1657676401964.html Docker默认安装在C盘: "C:\Progra ...

  4. 【库函数】Qt中Json的操作

    参考博客: https://blog.csdn.net/hp_cpp/article/details/80338116 从文件中读取json https://www.cnblogs.com/ybqjy ...

  5. C++ bitset的简单使用

    bitset 一般代替 bool 数组使用,常用于优化空间,因为 bitset 中一个元素只占 1 bit. bitset 的大小在定义使就需要确定.如果想要不定长的 bitset,就需要使用 vec ...

  6. java基础-构建工具mvn-day20

    目录 1. 初识mvn 2. 用maven创建工程 3. maven工程 之间的关系 4. 父子 mvn工程 5. mvn常见的插件 6. tomcat插件 1. 初识mvn mvn是一个项目构建工具 ...

  7. docker容器中执行GPU环境中的tensorflow和pytorch任务

    1. 背景 (1) 业务方提供了一台有GPU的服务器,且已经安装了显卡等组件,cuda版本10.2,具体信息如下 (2) 在裸机上部署anaconda.pytorch.tensorflow较为麻烦,因 ...

  8. 问题--之前必须结合fn+f1,f2等才能调节音量,亮度,现在只按f1,f2就调节,导致快捷键冲突

    1.问题 问题如上 2.解决方式 问题原因: 热键默认打开,用fn加上esc开启了热键的默认设置 解决: 再按一次fn加上esc关闭热键的默认设置

  9. Security的一些配置

    package com.example.demo.config; import com.example.demo.Service.UserDetailsServiceImpl; import com. ...

  10. mysql-字符函数-拼接-长度-切片-替换