Vim 是 Linux 下一款很常用的文本编辑器,虽然它对初学者而言并不友好,但通过一些插件的配合,它可以被打造成一款很强大的 IDE 。良许曾经介绍过三款很常用的插件,可点击以下链接查看:

Vim 编辑器的 3 款实用插件

本文再介绍一款 Vim 编辑器中的一款很强大插件—— VIM Fugitive 。这款插件可以实现你在 Vim 编辑器里直接完成 Git 操作,而无需退出 Vim 。更多 Linux 精选干货电子书,可在公众号「良许Linux」后台回复 「资料」获取。

这个插件是开源项目,我们可以在以下地址获取源码:

https://github.com/tpope/vim-fugitive

安装方法:

cd ~/.vim/bundle
git clone https://github.com/tpope/vim-fugitive.git
vim -u NONE -c "helptags vim-fugitive/doc" -c q

现在进行一些基本功能演示。假如现在有这么一段代码:

  1 package main
2
3 import "fmt"
4
5 func main() {
6 x := true
7 items := []string{"tv", "pc", "tablet"}
8
9 if x {
10 for _, i := range items {
11 fmt.Println(i)
12 }
13 }
14 }

现在我们将第 6 行删除,再修改第 9 行,同时在 11 行后添加一行代码。现在我们想查看这些修改,按往常做法,我们是先保存文档再退出,然后执行 git status 。

但现在,我们不必退出,直接在命令模式下输入 :Gstatus ,直接就可以看到改动:

  1 # On branch master
2 # Your branch is up to date with 'origin/master'.
3 #
4 # Changes not staged for commit:
5 # (use "git add <file>..." to update what will be committed)
6 # (use "git checkout -- <file>..." to discard changes in working directory)
7 #
8 # modified: vim-5plugins/examples/test1.go
9 #
10 no changes added to commit (use "git add" and/or "git commit -a")
--------------------------------------------------------------------------------------------------------
1 package main
2
3 import "fmt"
4
_ 5 func main() {
6 items := []string{"tv", "pc", "tablet"}
7
~ 8 if len(items) > 0 {
9 for _, i := range items {
10 fmt.Println(i)
+ 11 fmt.Println("------")
12 }
13 }
14 }

如结果所示,Vim Fugitive 打开了一个有上下分屏的界面,上面一半,跟我们平常执行 git status 看到的结果一样,下面一半,就是具体发动内容,跟 git diff 类似。

2020 精选 阿里/腾讯等一线大厂 面试、简历、进阶、电子书 公众号「良许Linux」后台回复「资料」免费获取

在下半屏里,有三个符号:_ 表示在第 5 行与第 6 行之间有代码被删除,~ 表示在第 8 行代码被修改过,+ 表示 11 行新增了代码。

同样的,我们可以查看每行代码是谁改的,可以用 git blame ,而在这里对应的是 Gblame

e9949066 (Alvin Yan   2019-6-7 18:17:19 -0500)│    1 package main
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 2
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 3 import "fmt"
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 4
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│_ 5 func main() {
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 6 items := []string{"tv", "pc", "tablet"}
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 7
00000000 (Not Committed Yet 2019-6-7 18:55:00 -0500)│~ 8 if len(items) > 0 {
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 9 for _, i := range items {
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 10 fmt.Println(i)
00000000 (Not Committed Yet 2019-6-7 18:55:00 -0500)│+ 11 fmt.Println("------")
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 12 }
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 13 }
e9949066 (Alvin Yan 2019-6-7 18:17:19 -0500)│ 14 }

我们同样也看到第 8 和 11 行还没有提交。

现在我们想要提交我们的改动,可以敲入 :Gcommit 命令。Vim Fugitive 将打开另外一块区域,我们可以在里面写入要提交的信息。

  1 vim-5plugins: Updated test1.go example file
2 # Please enter the commit message for your changes. Lines starting
3 # with '#' will be ignored, and an empty message aborts the commit.
4 #
5 # On branch master
6 # Your branch is up to date with 'origin/master'.
7 #
8 # Changes to be committed:
9 # modified: vim-5plugins/examples/test1.go
10 #

然后我们就可以执行 :wq 结束提交。

[master c3bf80f] vim-5plugins: Updated test1.go example file
1 file changed, 2 insertions(+), 2 deletions(-)
Press ENTER or type command to continue

我们同样可以继续使用 :Gstatus 来查看提交后的状态,也可以使用 :Gpush 将提交推送到远程仓库。

  1 # On branch master
2 # Your branch is ahead of 'origin/master' by 1 commit.
3 # (use "git push" to publish your local commits)
4 #
5 nothing to commit, working tree clean

以上这些是 Vim Fugitive 最基础的用法,如果想学习它的更高级用法,可以去它的 Github仓库查看,那里有更详细的教程。

看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!

  1. 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
  2. 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
  3. 关注我的博客:lxlinux.net

如何在 Vim 里直接完成 Git 操作?的更多相关文章

  1. 如何在vim里删除空行?

    删除空行,进入底行模式 :g/^$/d ^代表首列 $代表尾列 d代表删除 g代表全局替换

  2. Linux如何在vim里搜索关键字

    例如搜索 the写法:/the     +回车 /+关键字 ,回车即可.此为从文档当前位置向下查找关键字,按n键查找关键字下一个位置: ?+关键字,回车即可.此为从文档挡圈位置向上查找关键字,按n键向 ...

  3. [转]如何在 Git 里撤销(几乎)任何操作

    任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力.在 Git 里,“撤销” 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点 ...

  4. 如何在 Git 里撤销(几乎)任何操作

    任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力.在 Git 里,“撤销” 蕴含了不少略有差别的功能. 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点 ...

  5. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  6. [转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framew ...

  7. git操作(强烈推荐)

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  8. 使用Gitkraken进行其他Git操作

    使用Gitkraken进行其他Git操作 查看某次 commit 的文件改动 使用 Gitkraken 能非常方便的看到任意一次的 commit 对项目文件的改动. 具体操作是:在树状分支图上单击某个 ...

  9. Git操作学习笔记

    根据廖雪峰老师git教程学习整理 这里需要辨析一下概念.Github是代码托管平台,是协作的工具;而Git是版本控制工具.Git不需要联网,在本机就可以使用 集中式版本控制系统与分布式版本控制系统 S ...

  10. Git操作(提高篇)

    Git操作(提高篇) 分支管理 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 假设你准备开发一个新功能,但是需要两周才能完成,第一周 ...

随机推荐

  1. spring-boot-@Valid和@Validated详解

    ---------------------------------------------------------------------------------------- 在实际的项目开发中,经 ...

  2. springboot集成webService开发详解

    https://blog.csdn.net/m0_51111980/article/details/124581559https://blog.csdn.net/qq_43842093/article ...

  3. Spring Boot 如何使用拦截器、过滤器、监听器

    过滤器的使用 首先需要实现 Filter接口然后重写它的三个方法 init 方法:在容器中创建当前过滤器的时候自动调用 destory 方法:在容器中销毁当前过滤器的时候自动调用 doFilter 方 ...

  4. uni-app封装网络请求promise

    在项目的根目录下,创建http文件夹. 然后在创建request.js文件 文件代码如下 export function apiapi(myurl,myget,mydata,tou="Acc ...

  5. SOUI4.0发布

    4.0在3.x基础上将核心对象全部COM接口化,支持C语言调用SOUI. GIT仓库: gitee: https://gitee.com/setoutsoft/soui4 github: https: ...

  6. OpenStack基本介绍

    本文分享自天翼云开发者社区<OpenStack基本介绍>,作者:m****n 基本介绍 OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenSt ...

  7. Python介绍以及应用场景

    Python介绍以及应用场景 Python简介 ​ Python,作为一种解释型.面向对象的高级编程语言,自1989年圣诞节期间由荷兰计算机科学家Guido van Rossum创造以来,已经取得了举 ...

  8. Kali 安装并配置 Nessus

    Kali 安装并配置 Nessus 安装 Nessus 创建nessus文件夹 sudo mkdir /opt/nessus 下载 Nessus ( https://www.tenable.com/d ...

  9. 面试官最想听到的Vue和React区别

    前言 欧阳最近找工作面试时总是被问到两个问题:Vue和React的区别和从编译原理的角度来聊聊Vue的template和React的jsx.面试官问这些问题一般是想了解你对这两个框架的理解,所以这是一 ...

  10. 微信扫码登录授权过程中state字段的用法

    问题描述 最近在实现微信扫码登录这一块,然后看到state字段上面说是可以防csrf攻击 那么现在假设一个用户扫完码后由于某些原因扫码后的响应还没到,但是该平台的回调url已被窃取,然后被人设置到某个 ...