简 述: 使用 Visual Studio 2019 开发 C++ 工程,经常遇到仅修改几行代码,但整个文件所有行都显示被修改;甚是奇怪数月之久,于近日彻底解决之,共享同困惑于此者。Visual Studio 开发工程项目,设置默认行尾和文件编码。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


背景

  💻: win10 21H2 📎 Visual Studio 2019 📎 Git Extensions 📎 GitLab

  使用 VS 2019 在项目上开发,常遇到修改 .h / .cpp 文件,明明仅增删几行后,但用 git diff / git gui 工具 / GitLab 网页端,查看 push 的提交差异,却显示整个文件所有行都有增删修改了。忧愁,甚是不解,无奈搁置许久。


分析

  一日,后无意想到可能一种原因,后验证,果然可行,遂纪录此方案供后来者查阅之。

**两个原因: ** 在 VS 2019 中编辑文件后,ctrl + s 保存时,

​ ⅰ改变了文件编码,如 GBK ↔ UTF8 ;

​ ⅱ 文件行尾发生了改变,如 CRLR ↔ LF ;


  原因为商业项目中,团队开发合作,通常会进行跨平台支持,如前 K 司的 WPS,大家使用不同的 IDE 和默认环境配置造成的。

  如:A 在 Mac / Linux 下修改 xxx.cpp 文件后保存,会将一些自己操作系统下的默认符号,也保存下来后提交到 Git 仓库;后面 B 在 Windows 下从 Pull 此更新,亦修改此 xxx.cpp 文件后保存时,也会将自己的系统下的默认符号保存进文件。此时 B 查看 git

diff 就及容易看到整个文件所有行都被修改。


解决

方案一

  每次手动在 notepad++ 中对单个文件修改”行尾”、”文件编码”;可行,但很麻烦。且不足在于不知道下一个文件会是哪一个文件会有此些问题。

  当然希望依托于 Visual Studio 有比较好的的解决方案,且最优雅和方便的。搜寻之后,放上我的配置;


我的需求为:

  • 每次修改 .cpp 文件后,保存时候,自动使用的为当前文件的 **”行尾”**;不会默认强制保存为 CRLR 或 LR 编码。
  • 每次修改 .cpp 文件后,保存时候,自动使用的为当前文件的 “编码格式” ;不会默认强制保存为 GBK 或 UTF8 编码。
  • 能够在 Visual Studio 编辑区域,能够轻松查看到当前文件的 “编码格式”“行尾” ;最好还能点击一下就能在不同编码格式、不同行尾之间切换,耐久奶思了。

方案二『荐』

  这个三个需求使用下面『插件1』和『插件2』完美解决。


在线插件可安装

『插件1』 LineEndingsUnifier 文件行尾设置;使用当前文档的行尾(CRLR、LR、LF)


『插件2』FileEncoding 客户编辑区域右下角显示当前文件编码


还有一个类似『插件3』 Strip’em Add-in for Visual Studio 文件行尾设置;使用当前文档的行尾(CRLR、LR、LF),不过仅支持 VS 2008-2017;