Python的Emacs填充模式不会破坏引用错误的引用字符串

Bry*_*mas 7 python string emacs

我正在Emacs中编写一个Python脚本,并激活了自动填充次要模式M-x auto-fill-mode.我似乎经常遇到的一个问题是,这种填充模式往往会破坏多行中的引用字符串而不进行任何补偿调整,从而导致脚本运行时出错.

例如:

print 'the quick brown fox jumped over the lazy dog and
then did something else'
Run Code Online (Sandbox Code Playgroud)

这导致SyntaxError: EOL while scanning string literal运行时.

在Emacs中是否存在填充模式,即Python"字符串文字识别",并自动进行Python样式中讨论的行继续/相关调整之一- 使用字符串继续行?而不是天真地分裂导致错误的字符串?

Mic*_*con 2

编辑我自己禁用了此功能,因为它导致 Emacs 在某些文档上占用大量处理器时间。我只是忍受糟糕的填充模式——如果有什么东西能正确地做到这一点,我会很高兴:

some_list.append("This is a very long string which I would like to "
                 "break in a sensible way")
Run Code Online (Sandbox Code Playgroud)

/编辑

我已经为同样的问题绞尽脑汁有一段时间了,终于找到了这个解决方案。

这似乎对我有用。不幸的是,我认为这会关闭所有模式下任何带引号的字符串的填充,而不仅仅是 Python。我确信具有比我更强的 elisp-fu 的人可以提出将其限制为 python 模式的修改,但这是一个比上面提出的更好的解决方案,IMO。

这个解决方案取自这个相关的答案——如果你喜欢这个答案,请给这个答案点赞。

(defun odd-number-of-single-quotes-this-paragraph-so-far ()
  (oddp (how-many "'" (save-excursion (backward-paragraph) (point)) (point))))
(defun odd-number-of-double-quotes-this-paragraph-so-far ()
  (oddp (how-many "\"" (save-excursion (backward-paragraph) (point)) (point))))

(add-to-list 'fill-nobreak-predicate
     'odd-number-of-single-quotes-this-paragraph-so-far)
(add-to-list 'fill-nobreak-predicate
     'odd-number-of-double-quotes-this-paragraph-so-far)
Run Code Online (Sandbox Code Playgroud)

'''