我的Emacs(Ubuntu 9 + Emacs 23 + Pyflakes)在我输入"""
用于字符串块时会挂起。
有人遇到过同样的问题吗?我认为这可能不是一个Emacs的问题,而是一些我用来进行错误检查的Python模式或Pyflakes。
有人解决了这个问题吗?这真是一次令人沮丧的经历。
我的Emacs(Ubuntu 9 + Emacs 23 + Pyflakes)在我输入"""
用于字符串块时会挂起。
有人遇到过同样的问题吗?我认为这可能不是一个Emacs的问题,而是一些我用来进行错误检查的Python模式或Pyflakes。
有人解决了这个问题吗?这真是一次令人沮丧的经历。
最新的开发模式pyflakes解决了我的问题。感谢大家。
sudo easy_install -U pyflakes
对于那些在Emacs 28中遇到此问题并像我一样花费了数小时感到沮丧的人,问题是一个已知的错误,在emacs 29中已经得到修复。
请按照这里的指南:https://github.com/emacs-mirror/emacs/blob/master/INSTALL 在这里下载29:https://alpha.gnu.org/gnu/emacs/pretest/
将任何错误粘贴到ChatGPT中并按照说明操作 :)
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pyflakes" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
这是出现问题时的回溯信息:
使用gdb调试问题,但由于使用了Emacs包的编译二进制文件,无法获得有用的信息。
(gdb) step
Single stepping until exit from function F707974686f6e2d6e61762d656e642d6f662d73746174656d656e74_python_nav_end_of_statement_0,
which has no line number information.
最后,我放弃了并使用解决方法来添加或修复文档字符串:
此外,在 Emacs 28.1 + gcc/9.5.0_jit 版本中,在单引号之前键入单引号或双引号会导致这个问题。 在空行或不在单引号之前键入双引号则不会出现这个问题。
关于 gdb 的更多信息:
(gdb) backtrace
#0 0x0000000000676a6c in syntax_property_with_flags ()
#1 0x000000000067e33a in scan_sexps_forward ()
#2 0x000000000067eae9 in Fparse_partial_sexp ()
#3 0x0000000000635396 in funcall_subr ()
#4 0x0000000000634e7a in Ffuncall ()
#5 0x00007f366cb8de6f in F73796e7461782d70707373_syntax_ppss_0 () at /xxx/emacs/28.1/x86_64-pc-linux-gnu/../../../../bin/../lib/emacs/28.1/native-lisp/28.1-7901736e/preloaded/syntax-bf4e4bc4-19987706.eln
...
#68 0x000000000046df78 in redisplay_window_1 ()
#69 0x0000000000631365 in internal_condition_case_1 ()
#70 0x000000000046d2ae in redisplay_internal ()
#71 0x000000000046b129 in redisplay ()
#72 0x000000000057e312 in read_char ()
#73 0x000000000058d619 in read_key_sequence ()
#74 0x000000000057b509 in command_loop_1 ()
#75 0x00000000006312be in internal_condition_case ()
#76 0x000000000057ad96 in command_loop_2 ()
#77 0x00000000006309fa in internal_catch ()
#78 0x000000000057ad3e in command_loop ()
#79 0x000000000057a2f2 in recursive_edit_1 ()
#80 0x000000000057a490 in Frecursive_edit ()
#81 0x0000000000576fc2 in sort_args ()
(gdb)
看起来emacs代码存在一些问题导致了这个问题。
然而,当启动没有init.el文件的Emacs时,无法重现此问题。因此,应该是由已安装的包触发的。
最后,在custom-set-variables中注释掉下面的行后,问题消失了。因此,至少对于Emacs 28.1 + gcc/9.5.0_jit,它不是由任何包引起的。
;; '(debug-on-error t)
只需在init.el文件中添加以下内容即可复制:
(custom-set-variables
'(debug-on-error t)
)
'(debug-on-error t)
也可以写成 '(debug-on-error '(nil))
使用 '(debug-on-error nil)
就不会有问题了。
因此,只要将 debug-on-error
设置为 always - t
或者 when - '(nil)
,就会出现问题。