在Vim中强制混合换行符:解决Python脚本跨平台执行报错问题
解决Python文件Shebang换行符问题及Vim编辑配置
问题根源
Windows下生成的Python文件默认用CRLF(\r\n)换行,添加Shebang行后,Linux会把行尾的\r(显示为^M)当成python3的一部分,导致系统查找python3^M这个不存在的命令,触发错误。
用Vim单独修改首行换行符
直接在Vim内操作即可完成,无需拆分文件再合并:
- 打开目标文件:
vim x.py - 进入命令模式,执行替换命令修改首行换行符:
这条命令仅针对第1行,删掉行尾的1s/\r$//\r,将首行的CRLF替换为Unix风格的LF换行。 - 保存文件:
:w
编辑时隐藏^M并保持全局DOS换行
修改首行后,编辑时其他行的^M会显示出来,想要隐藏该标记同时保留其他行的CRLF格式,按以下设置操作:
- 在Vim中执行两条命令:
set fileformat=dos set nolistfileformat=dos:让Vim默认以CRLF格式处理其他行,编辑时自动维持DOS换行规则。set nolist:关闭列表显示模式,行尾的\r(即^M)就不会再显示。
- 若担心保存时Vim自动将首行的LF转为CRLF,可临时开启二进制模式:
二进制模式下Vim不会自动转换换行符,set binary set noeolnoeol避免在文件末尾额外添加换行符,确保首行的LF格式不变。保存后执行set nobinary即可恢复正常编辑模式。
验证效果
修改完成后,在Linux下给文件添加执行权限:chmod +x x.py,执行./x.py即可正常运行,不会再出现找不到命令的错误。
内容的提问来源于stack exchange,提问作者hochl
相关产品推荐
相关产品推荐

