代码开发与存储的环境会变化,可能会在Windows系统或Unix/Linux系统下。这样会带来一个问题,在Windows下输入保存的文件,放在Unix/Linux系统下时,可能会发现每行末尾多了一个^M字符。原因是回车换行在两种系统下用的不同符号,Windows下是\a\d,两个字符,Linux下\d,一个字符。结果Windows下多出的\a在Linux下表现为每行末尾多了一个^M字符。Linux下GVIM工具中用命令:set list可以显式地看到^M,用命令:set list!关闭显式显示。
这样会倒致一些问题的产生,比如可能编译不过,脚本不能执行。如果是大量代码或脚本,这个问题无疑是一个炸弹。而且版本管理工具(比如SVN)虽然能知道两者有差异,但diffview里又看不出来这个差异。这些影响无疑对项目相当不利。
如果采用了下面的方法进行转换,这些烦恼就不是问题。个人首先推荐方法3。
1. vi打开文件,执行:
:%s/^M//g
2. 直接删除^M。(vi中无^M)
tr -d "\015" < winfile > unixfile
3. 命令替换^M。(vi中还有^M,但windows下无)
dos2unix < winfile > unixfile
4. 用sed替换掉^M。(vi中还有^M,但windows下无)
sed -e 's/\^M//g' winfile > unixfile
注意:^M通过ctrl+m输入或拷贝或ctrl+q ctrl+m输入。
winfile即Windows系统下的file,unixfile即Unix/Linux系统下的file。