Linux下9种优秀的代码比对工具推荐

2023-10-27

大家好,我是良许。

在我们编写代码的时候,我们经常需要知道两个文件之间,或者同一个文件不同版本之间有什么差异性。在 Windows 下有个很强大的工具叫作 BeyondCompare ,那在 Linux 下需要用到什么工具呢?

本文介绍 9 种 Linux 下常用的 9 种代码比对工具,不仅有命令行工具,还有 GUI 界面工具,让你轻松进行代码比对。

1. diff命令

diff 命令是 Linux 下自带的一个强大的文本比对工具,而且使用起来非常方便。对于它的使用,我之前也单独写过一篇文章介绍,点击下方链接可以查看。

教你一招Linux下文本比对方法

diff 命令在大多数的 Linux 发行版里已经预装了,它可以逐行比对两个文本文件,并输出它们的差异点。更多介绍可以直接查看它的 man 手册。

$ man diff

但是,diff 命令虽然强大,但它的输出结果实在是太感人了,不直观也不清晰。于是,有大佬为了弥补这个缺点,基于 diff 开发了更强大的工具。这里推荐两个:colordiffwdiff

colordiff命令

colordiff 是一个 Perl 脚本工具,它的输出结果和 diff 命令一样,但是会给代码着色,并且具有语法高亮功能。同时,你如果不喜欢它的默认颜色的话,还可以自定义主题。

你可以自行安装 colordiff 到你的电脑,根据不同的发行版选择不同的安装命令。

$ yum install colordiff             [On CentOS/RHEL/Fedora]
$ dnf install colordiff             [On Fedora 23+ version]
$ sudo apt-get install colordiff    [On Debian/Ubuntu/Mint]

同样,你可以使用 man 命令查看它的帮助文档:

$ man colordiff
wdiff命令

diff 命令是逐行比较差异,而 wdiff 更变态,是逐字比较。所以如果你的文本只是修改了少数一些词语的话,使用 wdiff 命令将更加高效。

安装命令如下:

$ yum install wdiff             [On CentOS/RHEL/Fedora]
$ dnf install wdiff             [On Fedora 23+ version]
$ sudo apt-get install wdiff    [On Debian/Ubuntu/Mint]

更详细内容可以查看它的 man 手册。

$ man wdiff
2. vimdiff命令

vimdiff 等同于 vim -d 命令,即 Vim 编辑器的 diff 模式。

该命令后面通常会接两个或多个文件名作为参数,这些文件会同时在 Vim 编辑器的分割窗口中打开,并高亮显示文件中内容有差异的部分。

它的中文主页是:http://vimcdoc.sourceforge.net/doc/diff.html

以上介绍的两款是 Linux 命令行的对比工具,我们再来看一些 GUI 比对工具。

3. Kompare

Kompare 是基于 diff 的一个 GUI 工具,使用者可以很方便看到文件之间的差异,并且支持合并这些差异。

Kompare 的特性有如下:

  • 支持多种 diff 格式;
  • 支持目录之间的比对;
  • 支持读取 diff 文件;
  • 自定义界面;
  • 创建及应用源文件的 patch 文件。

该工具的主页为:https://www.kde.org/applications/development/kompare/

4. DiffMerge

DiffMerge 是一个跨平台的 GUI 文本比对工具,具有 Linux ,Windows ,macOS 三大平台版本。我们知道,BeyondCompare 是一款收费软件,所以如果你们公司的版权要求比较高的话,不妨考虑一下 DiffMerge工具。

DiffMerge 具有两大功能:1. 图示化显示两个文件之间的改变。包含内部行高亮和完整的编辑支持。2. 图示化显示三个文件之间的改变。允许自动合并(当可以安全操作时)和对结果文件完全编辑控制。

它具有以下特性:

  • 支持文件夹比对;
  • 集成文件浏览器;
  • 高度可配置。

该工具的主页为:https://sourcegear.com/diffmerge/

5. Meld

Meld 是一个轻量级 GUI 代码比对工具,它支持用户比对文件、目录,并且高度集成版本控制软件。但针对软件开发人员,它的以下几个特性尤为吸引人:

  • 执行双向和三向差异并合并
  • 轻松地在差异和冲突之间导航
  • 逐个文件地比较两个或三个目录,显示新文件,缺失文件和更改文件
  • 支持许多版本控制系统,包括 Git,Mercurial,Bazaar 和 SVN 等。

它的官网为:http://meldmerge.org/

6. Diffuse

Diffuse 是另外一款很受欢迎的,免费,小巧,也十分简单的 GUI 文本差异比对合并工具,它是用 Python 写成的,具有两个主要功能:文件比对及版本控制,允许文件编辑、合并,并且输出两个文件的差异点。

你可以使用它查看文本比对小结,使用鼠标选择文件里的某行进行编辑。它的其它特性包括:

  • 语法高亮
  • 快捷键便于文本导航
  • 无限次撤销
  • 支持 unicode 编码文件
  • 支持许多版本控制系统,包括 Git,Mercurial,Bazaar 和 SVN 等。

它的官网为:http://diffuse.sourceforge.net/

7. XXdiff

XXdiff 是一款免费、强大的文件及文件夹差异比对及合并工具,它可以运行在很多类 Unix 系统上。不过它有个限制就是它不支持 unicode 文件,也没法办法直接编辑文件。

它具有以下特性:

  • 递归对比文件及文件夹
  • 高亮显示差异点
  • 合并差异点,导出结果
  • 支持外部 diff 工具,比如:GNU diff,SIG diff ,Cleareddiff ,以及其它更多工具
  • 支持脚本拓展

8. KDiff3

KDiff3 是另外一种很强大的跨平台差异比对及合并工具,它是由 KDevelop 开发而成,可以在所有类 Unix 平台上运行,包括 Linux ,Mac OS ,Windows 等。

它可以比对或合并两到三个文件或目录,具有以下特性:

  • 可以逐句、逐字对比差异
  • 支持自动合并
  • 内置编辑器,可以手动解决冲突
  • 支持 unicode ,UTF-8 等各种编码格式
  • 支持打印差异

它的官网为: http://kdiff3.sourceforge.net/

9. TkDiff

TkDiff 是另外一种跨平台,易于使用的 GUI 文本比对工具,可以运行在 Linux ,Windows 及 MacOS 系统上。它同样提供一个左右分开的界面,用于查看对比的两个文件。

但是,它也有一些其它文本对比工具没有的功能,比如差异书签,以及一个便于快速定位导航差异点的导航图。

它的官网为:https://sourceforge.net/projects/tkdiff/

最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下9种优秀的代码比对工具推荐 的相关文章

  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • Cython:为什么 size_t 比 int 快?

    更改某些 Cython 变量的类型int输入size t可以显着减少某些功能的时间 30 但我不明白为什么 例如 cimport numpy as cnp import numpy as np def sum int cnp int64 t
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • 不重复的Python组合

    我有一个数字列表 我想从中进行组合 如果我有清单 t 2 2 2 2 4 c list itertools combinations t 4 结果是 2 2 2 2 2 2 2 4 2 2 2 4 2 2 2 4 2 2 2 4 但我想得到
  • 在 (i)python 脚本中从 jupyter 内核获取输出

    我想从单个 ipython 会话中打开多个内核 在这些内核上运行代码 然后收集结果 但我不知道如何收集结果 甚至不知道如何查看 stdout stderr 我怎样才能做这些事情呢 到目前为止我所得到的 我已经使用如下代码管理了前两个步骤 打
  • 在 Docker 容器内运行时,如何自动在 API 路由文件中进行 FASTAPI 拾取更改?

    我通过 docker 运行 FastApi 在 docker compose 中创建一个名为 ingestion data 的服务 我的 Dockerfile FROM tiangolo uvicorn gunicorn fastapi p
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • Tornado websocket handler , self.close() 正在关闭连接而不触发 on_close() 方法

    我是 python stackoverflow tornado 的新手 所以请耐心等待 纠正我 我正在使用龙卷风开发实时应用程序 当我在 Websocket 处理程序类中调用 self close 时 on close 方法不会启动 这次我
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • 如何使用SAXReader解析GPX文件?

    我正在尝试解析GPX file http en wikipedia org wiki GPS eXchange Format 我用 JDOM 尝试过 但效果不太好 SAXBuilder builder new SAXBuilder Docu
  • 安排 Asyncio 任务每 X 秒执行一次?

    我正在尝试创建一个 python 不和谐机器人 它将每隔 X 秒检查一次活跃会员 并根据会员的在线时间奖励积分 我正在使用 asyncio 来处理聊天命令 这一切都正常 我的问题是找到一种方法来安排每隔 X 秒异步检查一次活动成员 我已经阅
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • 将 pandas 数据框中的多列更改为日期时间

    我有一个 13 列和 55 000 行的数据框 我正在尝试将其中 5 行转换为日期时间 现在它们返回类型 对象 我需要转换这些数据以进行机器学习 我知道如果我这样做 data birth date pd to datetime data b
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla

随机推荐

  • Nodejs制作自定义中间件

    对于Nodejs的中间件我想各位小伙伴都有所了解 下边我就以制作一个自定义的处理表单数据的中间件为例 告诉大家如何自作一个属于自己的自定义中间件 1 创建一个util js文件 用于封装编写自定义的表单数据处理中间件 导入querystri
  • 数据库的读写锁

    今天看数据库事务的ACID时 涉及到了并发下的读写锁 由于课程上了太久也没太多印象了 一开始就照着多线程的字面意思去理解 读的时候加锁和写的时候加锁 但是根据这个理解后面的逻辑变得很奇怪 因此重新复习了一下读 共享 锁和写 排他 锁 写锁
  • 在外包干了三年,我废了..… 不吹不黑!

    往期热门文章 1 用鸿蒙跑了个 hello world2 还在写大量 if 来判断 试试用一个规则执行器来替代它3 Spring Boot中的线程池 你真的会用么 4 重磅推荐几个接私活的脚手架利器 5 MySQL究竟是怎么执行的 看完终于
  • vivado 中手动添加 pynq类型板

    随着人工智能的火热 算法的并行计算越来越受到追捧 而pynq python zynq 作为可以用python为高级语言变相调用fpga的模块的soc板也越来越受到人工智能和硬件相关学生的喜爱 而然 Vivado 2019之前的很多版本是默认
  • Xmind 免费安装使用教程

    目录 一 百度云下载 二 安装 一 百度云下载 1 链接 https pan baidu com s 1ij6ta0nnsdoiN5puJ2pDEQhttps pan baidu com s 1ij6ta0nnsdoiN5puJ2pDEQh
  • 将数组中的元素*2

    import java util Arrays public class TestDemo1 public static int func int array for int i 0 i
  • VUE2 使用高德地图(入门超详细)

    创建项目就不用说了吧 高德地图的api https lbs amap com 进去后按照提示注册登陆 点击左侧应用管理 我的应用 点击右上角创建新应用 给新创建的应用添加key 红框圈起来的是必填项 提交后就有key和密钥两个重要的东西 项
  • Tesla AI day中感知部分的详细解析(一)——Transformer在图像领域的应用

    目录 前言 Transformer Input Embedding Masked Multi Head Attention Sequence mask Positional embbedings Swin Transformer Input
  • 接口测试之:Postman工具进阶教程。

    Postman进阶教程 1 引言 2 Postman详细教程 2 1 选择Postman的理由 2 2 安装 2 3 工作区功能介绍 2 4 接口类型请求 2 4 1 Get请求处理 2 4 2 Post请求处理 2 4 3 请求参数化 2
  • ElementUI-----UI框架

    ElementUI是由饿了么团队开源的UI框架 并于Vue完美契合 项目地址 https github com ElemeFE element 项目文档 Element The world s most popular Vue UI fra
  • 更改 VS Code C++ 默认代码风格为 Google C++ Style

    更改 VS Code C 默认代码风格为 Google C Style 安装插件 Clang Format C C 谷歌规范 进入设置 结果 自己规范 由于谷歌是缩进2个空格 括号不换行 但我喜欢缩进4个空格 括号不换行 只能自定义设置了
  • yolov7训练

    一 制作数据集 使用LabelImage进行标注 LabelImage的下载安装方法 百度上用的比较多 这里就不赘述了 简单介绍一下LabelImage的标注方法 制作自己的数据集 1 下载LabelImage 下载LabelImage源码
  • 用python来写Excel 的vlookup

    首先先介绍一下vlookup的基本用法 用vlookup 的前提 有一份确定了是标准的表 另一份是需要校验的 因为数量比较多 就需要用到vlookup的这个函数 比如校验名字和身份证是否对应 在表格或数值数组的首列查找指定的数值 并由此返回
  • 金蝶管易云 X Hologres:新一代全渠道电商ERP最佳实践

    业务简介 金蝶管易云是金蝶集团旗下专注提供电商企业管理软件服务的子公司 成立于2008年 是国内最早的电商ERP服务商之一 目前已与300 主流电商平台建有合作关系 以企业数据为驱动 深度融合线上线下数据 为超过11万家客户提供实现业务 财
  • Dubbo负载均衡策略实现

    一 dubbo版本说明 基于dubbo版本2 6 2讲解 二 负载均衡的接口关系 SPI RandomLoadBalance NAME public interface LoadBalance Adaptive loadbalance
  • CSS——属性选择器

    标签和属性结合
  • springboot+shiro+swagger+redis+vue+element完成权限系统

    1 回顾 1 Vue通过脚手架创建Vue工程 1 组件 网页 gt 组件 父组件 可以引用另一个组件 子组件 父组件怎么传参给子组件 2 路由 1 路由跳转
  • jdbc连接字符串

    MySQL String Driver com mysql jdbc Driver 驱动程序String URL jdbc mysql localhost 3306 db name 连接的URL db name为数据库名String Use
  • LeetCode 高级 - 最长连续序列

    最长连续序列 给定一个未排序的整数数组 找出最长连续序列的长度 要求算法的时间复杂度为 O n 示例 输入 100 4 200 1 3 2 输出 4 解释 最长连续序列是 1 2 3 4 它的长度为 4 分析 由于O n 时间复杂度的限制
  • Linux下9种优秀的代码比对工具推荐

    大家好 我是良许 在我们编写代码的时候 我们经常需要知道两个文件之间 或者同一个文件不同版本之间有什么差异性 在 Windows 下有个很强大的工具叫作 BeyondCompare 那在 Linux 下需要用到什么工具呢 本文介绍 9 种