在ViM中强制混合行尾

n6lpvg4x  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(153)

我有一个Python文件是在Windows下开发的,所以它自然有CR LF行尾。我用#!/usr/bin/env python3在上面添加了Python shebang,使它可以在Linux下直接执行。加载器打印出一条错误消息:

/usr/bin/env: ‘python3\r’: No such file or directory

我知道我可以简单地使用python3 x.py执行该文件,但出于各种原因,我希望在第一行使用#!
我目前的解决方案是将第一行放在一个单独的文件中,该文件具有Unix行尾,并使用cat prefix.py x.py > y.py生成一个具有混合行尾的可执行文件。但我更希望第一行由ViM以不同的方式处理。这可能吗?
如果我编辑y.py,除了第一行之外,我在每一行上都得到一个^M,因为这是一个混合行尾的文件,所以对我来说,一个解决方案是不显示^M,并在所有地方使用DOS行尾,但在第一行上保持UNIX行尾。

ozxc1zmp

ozxc1zmp1#

简单而明显的解决方案是在python脚本上运行dos 2unix,并去掉隐藏的\r字符。
黑客的解决方案是创建一个符号链接,字面上命名为/usr/local/bin/python^M,它指向/usr/local/bin/python,这将允许你在将来运行所有这样的python脚本,而不必先在它们上运行dos 2unix。
来源:https://natanyellin.com/posts/shebang-python-bad-interpreter-m/

相关问题