当前位置: 首页 > news >正文

使用 vimdiff 來呈現 Git diff 差異

原文地址:http://blog.longwin.com.tw/2009/11/vimdiff-vs-git-diff-2009/

GIT diff 最近一次 commit 到此次更改的所有變動(進階參數, 暫時先不列入此範圍), 呈現結果跟一般 diff 差不多.

  • 註: 若於 .gitconfig 設定下述, 則可多加上顏色區別.

    [color]
        diff = auto

 

若想要用 vimdiff 來取代 Git diff, 要如何做呢?
(下述步驟 參考此文: Git Diff with Vimdiff)

設定 vimdiff 取代 Git diff

  1. vim /usr/local/bin/git_diff_wrapper # 此位置只要放在可被執行的路徑即可, 在此先放在 /usr/local/bin/.

    #!/bin/sh
    vimdiff "$2" "$5"

  2. chmod +x /usr/local/bin/git_diff_wrapper
  3. vim ~/.gitconfig # 下述兩行都需要加入, pager 使用 diff 的設定, diff 呼叫外部程式 git_diff_wrapper.

    [diff]
        external = git_diff_wrapper
    [pager]
        diff =

  4. 或 vim ~/.gitconfig (二者挑其一即可)

    [diff]
        external = git_diff_wrapper
    [core]
        pager =

  5. 完成.

上述完成後, 直接於修改過的專案目錄下, 輸入 git diff, 就會於 vimdiff 的畫面 顯示 差異結果.

顯示 預設 git diff 結果

若想要看原始 git diff 的結果, 可用下述做法:

  1. vim ~/.bashrc # 最後一行加入下述

    function git_diff() {
        git diff --no-ext-diff -w "$@" | vim -R -
    }

    Git diff 參數說明
    • --no-ext-diff : 不允許執行外部 diff 命令(防止 call vimdiff)
    • -w : 忽略所有空白
    • -R : 將 vim 設定於唯讀模式(read-only mode)
    • - : 讓 vim 作為 pager
    • 詳細可見: git diff --help
  2. 於修改過的專案目錄 輸入 git_diff, 就會進入 vim 編輯原始 git diff 的結果.

Vimdiff 操作快速鍵

下述部份摘錄自此篇: Quick and Dirty : Vimdiff Tutorial

最常用的是 dp, vimdiff 會顯示左右兩個視窗, 於兩者差異處, 此區塊是要的, 就切換到要的那個視窗, 對想要的那個段落按 dp, 就會自動將此段內容複製到另外一個視窗的對應位置.

    • do - Get changes from other window into the current window.
    • dp - Put the changes from current window into the other window.
    • ]c - Jump to the next change.
    • [c - Jump to the previous change.
    • Ctrl W + Ctrl W - Switch to the other split window.
    • :diffupdate – diff update 
    • :syntax off – syntax off 
    • zo – open folded text
    • zc – close folded text

转载于:https://www.cnblogs.com/Phenix_Yang/archive/2012/10/11/2719867.html

相关文章:

  • android 开发Eclipse 快捷键
  • Qt学习之路(51): QByteArray和QVariant
  • 我该如何奋斗?
  • Qt学习之路(50): QString
  • 原创:C语言贪吃蛇代码
  • Qt学习之路(49): 通用算法
  • 【转】解决:SecureCRT在Linux下vim显示utf-8编码的文件乱码
  • Qt学习之路(47): 自定义Model之三
  • 用vc++做滚动条控件
  • Qt学习之路(48): 自定义委托
  • 9520个大气笔刷!902个无缝叠加图案!!770个质感纹理!!!
  • Qt学习之路(46): 自定义model之二
  • 解决EntityFramework数据库无法自动迁移解决方法
  • Qt学习之路(45): 自定义model之一
  • 编译原理-词法分析器(DFA,C语言描述,可分析C/C++词法)
  • SegmentFault for Android 3.0 发布
  • 【comparator, comparable】小总结
  • angular学习第一篇-----环境搭建
  • egg(89)--egg之redis的发布和订阅
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java2019面试题北京
  • Logstash 参考指南(目录)
  • magento 货币换算
  • Netty 4.1 源代码学习:线程模型
  • python 学习笔记 - Queue Pipes,进程间通讯
  • vue-cli在webpack的配置文件探究
  • 猴子数据域名防封接口降低小说被封的风险
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 学习JavaScript数据结构与算法 — 树
  • 一个SAP顾问在美国的这些年
  • 云大使推广中的常见热门问题
  • 大数据全解:定义、价值及挑战
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Linux·i2c驱动架构​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #mysql 8.0 踩坑日记
  • (1)(1.9) MSP (version 4.2)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (独孤九剑)--文件系统
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三)终结任务
  • (十) 初识 Docker file
  • (四)Android布局类型(线性布局LinearLayout)
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net连接MySQL的方法
  • @selector(..)警告提示
  • [20150321]索引空块的问题.txt
  • [Android]通过PhoneLookup读取所有电话号码
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]