Emacs 中 Notepad++ 中的 Python 脚本错误

标签 python emacs

我有一个用 Notepad++ 和 Pycharm 编写的大型 Python 脚本库,我想开始使用 Emacs 运行它们。但是,这些文件的某些内容导致 Emacs 中出现语法错误。

作为最小工作示例,我在 Notepad++ 中保存了以下内容:

print('hello world')

然后,我在 Emacs 22.3.1 中打开它,然后转到 Python --> Start Interpreter。我输入 C-c C-c,然后在解释器屏幕中出现以下错误:

File "/tmp/py110681cL", line 1
    print('hello world')
^
SyntaxError: invalid syntax

这使得它看起来像是在行的开头读取了一个缩进,但我在 Emacs 文本编辑器窗口中没有看到它。我尝试清理空白但无济于事。

如果我在 Emacs 中创建一个新文件并手动键入相同的代码,则按照此过程它运行得很好。

我不想手动重新输入所有预先存在的脚本,那么如何删除这个幻像空间呢?谷歌没有帮助...

更新:Notepad++ 用 [CR][LF] 代表我的新行。删除 Notepad++ 中的回车符可以使其在 Emacs 中运行。

最佳答案

问题似乎是 notepad++ 使用 \r\n (CARRIAGE RETURN + LINE FEED) 来表示换行符,而 Emacs 将 \r 解释为无效缩进(因为它是空格)。

为了防止将来发生这种情况,您可以转到设置 -> 首选项... -> 新文档 -> 格式(行结尾) 并选择 Unix/OSX\r\n 是 Windows 中表示换行符的方式,在 Unix/OSX/Linux 中是 \n 。 (旧版 Mac 只是 \r)。

要修改现有文件,您可以执行以下操作:

find /path/to/py/files -type f -iname '*.py' -exec sed $'s/\r$//' "{}" +;

(查找 /path/to/py/files 中的所有 .py 文件并执行 sed $'s/\r$//' (将行尾后面的所有 \r 替换为空)

关于Emacs 中 Notepad++ 中的 Python 脚本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387871/

相关文章:

python - 是否可以在请求中刷新 session ?

python - Python-Tkinter和socket.recv()循环

mysql - 如何让 emacs sql-mode 使用 mysql 配置文件 (.my.cnf)?

emacs - 使用 Emacs Lisp 下载文件

python - PyTorch 数据集中哪里使用了 len 函数?

python - numpy.unique 给出了集合列表的错误输出

emacs - Paredit 不会删除 paredit-backward-kill-word 上的右括号

Emacs:如何在打开 3 个以上的文件时停止显示 "*Buffer List*"

python - 当我们执行 sudo apt-get upgrade python3 时会发生什么

emacs - 如何在 Emacs 中将文件加载到缓冲区并在启动时切换到缓冲区