简 述: 使用 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;
系列
欢迎 star
⭐ 和 fork
🍴 这个系列的 C++ / QT / DTK
学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”