前言

最近因为工作原因,需要找出一个工程里面修改过的地方。VSCode里自带代码比较功能,可以高亮代码不同的地方。然而手动一个个打开文件来比较显然非常的繁琐,在网上检索后发现并没有相关的方法。因此,为了解决这个问题,在查阅了官方文档后,决定分享这个方法。

查阅文档

在The Visual Studio Code command-line interface中,有-d指令,可以打开差异编辑器(代码比较),需要输入两个文件夹的参数。

Argument

Description

-h or --help

Print usage

-v or --version

Print VS Code version (for example, 1.22.2), GitHub commit ID, and architecture (for example, x64).

-n or --new-window

Opens a new session of VS Code instead of restoring the previous session (default).

-r or --reuse-window

Forces opening a file or folder in the last active window.

-g or --goto

When used with file:line{:character}, opens a file at a specific line and optional character position. This argument is provided since some operating systems permit : in a file name.

-d or --diff <file1> <file2>

Open a file difference editor. Requires two file paths as arguments.

-m or --merge <path1> <path2> <base> <result>

Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions, and the output file to save merge results.

-w or --wait

Wait for the files to be closed before returning.

--locale <locale>

Set the display language (locale) for the VS Code session. (for example, en-US or zh-TW)

因此,通过在VScode终端(或用win+R,输入CMD,用cd指令进入需要比较的文件夹)例如:

code  . -d 目标文件1路径 目标文件2路径
cd 目标文件目录
code  . -d 目标文件1路径 目标文件2路径

可以用CMD来进行操作意味着:通过编写bat批处理命令文件即可实现一键打开所有需要比较的代码。 

以我在桌面创建的compare文件夹为例,compare文件夹中包含了proj1和proj2文件夹,分别代表着修改前和修改后的工程文件,现在我们要找出哪些代码发生了变化:

visual studio professional分析重复代码 visual studio 代码对比_ide

 在下方终端输入

code  . -d .\proj1\main.c .\proj2\main.c

 然后编辑器便打开了这两个文件的差异比较器,可以看到两个代码第六行有区别和变动。

visual studio professional分析重复代码 visual studio 代码对比_Code_02

 通过依次输入下列的命令,即可以打开所有需要比对的文件:

code  . -d .\proj1\main.c .\proj2\main.c
code  . -d .\proj1\module1.c .\proj2\module1.c
code  . -d .\proj1\module2.c .\proj2\module2.c
code  . -d .\proj1\module3.c .\proj2\module3.c
code  . -d .\proj1\lib.h .\proj2\lib.h

 但索性这里的文件比较少,如果是一个比较大的工程,文件到达两位数时,手动输入这些代码也非常耗时耗力。这里推荐通过python来实现列出文件夹中的列表,并输出需要的指令(这里python文件创建在compare目录下,".\"可以指向当前所在目录)。

import os
temp=''
filelist = os.listdir('.\\proj1')
for sv in filelist:
    #通过该判断筛选掉需要读取的文件
    if(sv.find(".c")>0):
        #通过该判断筛选不需要读取的文件
        if(sv.find("h")<0):
            if(temp!=''):
                temp+='&'
            temp+="code  . -d .\\proj1\\"+sv+" .\\proj1\\"+sv
print(temp)

运行改代码后,成功导出了以下字符串 

code  . -d .\proj1\main.c .\proj2\main.c&code  . -d .\proj1\module1.c .\proj2\module1.c&code  . -d .\proj1\module2.c .\proj2\module2.c&code  . -d .\proj1\module3.c .\proj2\module3.c

在compare文件夹下创建新文本文档,重命名,将txt改为bat,右键编辑,将python运行后输出的字符串复制到其中,并保存。

(注:“&”可以一次性指向这些命令,如果没有“&”,只执行第一句。)

visual studio professional分析重复代码 visual studio 代码对比_编辑器_03

保存后双击该bat文件即可,vscode会自动打开所有需要比较的代码文件。

visual studio professional分析重复代码 visual studio 代码对比_目标文件_04

visual studio professional分析重复代码 visual studio 代码对比_vscode_05

 

 如果需要源文件进行学习的,可以点击下方链接来进行调试。


如果帮到你的话,希望能给作者点点赞,有问题可以在评论区提问,看到会及时回复。