删除windows代码文件中的'^M'

本文介绍如何通过简单的脚本来处理Windows复制过来的代码文件中的'^M'字符,使其看起来更整洁,并使用indent工具进一步整理代码格式。

有时从windows中copy过来的代码文件中会有很多'^M'(回车)字符,
这使代码看起来很不整洁。这里分享一个简单的处理办法。

思路:

找到文件中的'^M'字符,并全部替换为space。最后用indent整理代码。
'^M'的ascii是13。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#define M_ASC 13

int main(int argc, char **argv)
{
	char ch, *path;
	int res;
	FILE *f;
	long pos;

	if (argc > 1)
		path = argv[1];

	f = fopen(path, "r+");
	if (!f) {
		fprintf(stderr, "Open() %s ERROR(%s)\n", path, strerror(errno));
		exit(EXIT_FAILURE);
	}

	do {
		pos = ftell(f);
		ch = fgetc(f);
		if (ch == M_ASC) {
			fseek(f, pos, SEEK_SET);
			fputc(' ', f);
		}
	} while (ch != EOF);

	fclose(f);
	exit(EXIT_SUCCESS);
}
用indent工具整理代码:
#!/bin/sh
PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1"
indent $PARAM "$@"


--
其他方法:
perl-> http://www.perlmonks.org/?node_id=183567

#!/usr/bin/perl -w 

use strict;
my $out;

if(@ARGV!=1 && @ARGV!=2){
    print "Usage:\n\t$0 input [output];\n";
    exit;
}

open(IN, "<$ARGV[0]") or die "couldn't open $ARGV[0]: $!";

if(<IN>=~m/(^#!.*perl.*)/){
    $out.=$1;
}

while(<IN>){
    chomp;
    chop;
    $_.="\n";
    $out.=$_;
}

close IN;    

if(@ARGV==1){
    unlink $ARGV[0];
    open(OUT,">$ARGV[0]") or die "couldn't open $ARGV[0]: $!";
}
elsif(@ARGV==2){
    open(OUT,">$ARGV[1]") or die "couldn't open $ARGV[1]: $!";
}

print OUT $out;
close OUT;


<think>嗯,用户问的是如何在VSCode中移除代码里的^M字符。从问题描述看,用户可能在编辑文件时遇到了行尾显示^M的特殊字符,这通常发生在Windows和Unix系统文件格式混用的情况下。查考引用内容,引用[3]提到VSCode支持通过插件和快捷键进行格式化操作,虽然没直接解决^M问题,但给了方向。用户提供的其他引用信息无关。需要思考如何根据系统原理解决这个问题。^M本质是Windows换行符\r\n中的\r字符显示异常。解决方案应该围绕文件格式转换展开。想到三个层面:1)基础搜索替换方案(快速简单);2)文件格式批量转换(高效彻底);3)预防性设置(根除问题)。用户可能是开发者,意外保存了Unix格式文件后出现兼容问题。回复要给出具体命令和菜单位置,注意强调"查找替换时需要开启正则表达式"这个关键点,因为普通用户容易忽略。补充自动化方案时,考虑到用户引用里提及的ESLint插件,类比说明EditorConfig的预防作用会更好。最后生成的问题延伸很必要:用户可能深层需求是规范团队协作的换行符标准,或者处理从Linux服务器下载的文件。</think> 在VS Code中移除代码里的 `^M` 字符(本质是Windows换行符 `\r\n` 中的 `\r` 回车符),可通过以下方法解决: --- ### 方法一:使用查找替换(推荐) 1. **打开查找替换面板** `Ctrl+H`(Windows/Linux)或 `Cmd+H`(macOS) 2. **开启正则表达式** 点击查找框右侧的 `.*` 图标,激活正则匹配模式。 3. **输入替换内容** - **查找框**:输入 `\r`(表示回车符) - **替换框**:留空(删除回车符) 👉 或需完整替换为Linux换行符:查找 `\r\n`,替换为 `\n` 4. **执行替换** 点击右侧「全部替换」按钮。 > **原理**:`^M` 是Windows换行符 `\r`(ASCII 13)在类Unix系统的显示,本质是文件行尾格式冲突[^1]。 --- ### 方法二:修改文件换行符格式 1. **状态栏修改** 点击VS Code右下角的「行尾格式标识」(如 `CRLF` 或 `LF`),选择 `LF`(Unix格式)。 2. **保存生效** 修改后按 `Ctrl+S` 保存文件,系统自动转换格式。 > 此方法直接统一文件行尾规范,避免混用格式[^2]。 --- ### 方法三:批量转换工具(适用于多文件) 安装扩展 **EditorConfig for VS Code**: 1. 商店搜索安装 `EditorConfig` 2. 项目根目录创建 `.editorconfig` 文件,添加: ```ini [*] end_of_line = lf # 强制使用Unix换行符 ``` 3. 保存后,VS Code自动标准化所有文件换行符。 --- ### 预防措施 1. **设置默认行尾** VS Code 设置中搜索 `files.eol`,选择 `\n`(LF)。 2. **Git 配置**(推荐) 在仓库根目录执行: ```bash git config core.autocrlf input # Mac/Linux git config core.autocrlf false # Windows(需统一团队设置) ``` 禁止Git自动转换换行符,减少冲突[^3]。 --- **总结**: `^M` 本质是Windows回车符 `\r` 在Unix系统的显示异常。通过 **正则替换删除 `\r`** 或 **统一文件为LF格式** 可立即解决,长期项目推荐用 **EditorConfig** 和 **Git设置** 规范换行符。 --- **相关问题** 1. 如何让VS Code自动修复代码格式? 2. 不同操作系统下的换行符差异是什么? 3. Git如何处理不同操作系统的换行符冲突? 4. 如何配置VS Code的默认文本编码? [^1]: `^M` 是`\r`(Carriage Return)的显示符号,源于Windows与Unix的换行符差异(`\r\n` vs `\n`)。 [^2]: VS Code的状态栏格式切换功能可快速解决跨平台文件编辑问题。 [^3]: Git的`core.autocrlf`设置能有效规避团队协作中的换行符混乱问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值