Режим заполнения Emacs для Python, который не прерывает цитируемые строки, вызывающие ошибки

Я пишу скрипт Python в Emacs и активировал вспомогательный режим Auto-Fill с помощью Mx auto-fill-mode . Проблема, с которой я всегда сталкиваюсь, заключается в том, что этот режим заполнения имеет тенденцию прерывать цитируемые строки на нескольких строках без каких-либо компенсационных корректировок, что приводит к ошибке при запуске скрипта.

Например:

 print 'the quick brown fox jumped over the lazy dog and then did something else' 

в результате чего SyntaxError: EOL while scanning string literal при запуске.

Есть ли режим заполнения в Emacs, который является «строковым литералом» Python, и автоматически делает, например, одно из продолжений / связанных с продолжением строк, обсуждаемых в стиле Python – продолжение строки со строками? , а не наивно разделение строки, вызывающей ошибку?

2 Solutions collect form web for “Режим заполнения Emacs для Python, который не прерывает цитируемые строки, вызывающие ошибки”

Я уже немного отбивался от этой проблемы, и наконец нашел это решение.

Кажется, это работает для меня. К сожалению, я думаю, что это отключает заполнение для любых цитируемых строк во всех режимах, а не только для 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) 

«»»

AFAIU питоновским способом было бы использовать тройные кавычки и выводить через печать.

Это решение предлагает функцию заполнения, используемую автозаполнением:

 (defun my-make-continuation-line-by-fill () (when (eq major-mode 'python-mode) (save-excursion (forward-line -1) (end-of-line) (unless (member (char-before) (list 92 32)) (insert-and-inherit " ") (unless (eq (char-after) ?\\) (insert-and-inherit "\\")))))) 

В этом случае он ограничен режимом python, но должен работать и с другими.

Какая функция совета зависит от настроек системы. Здесь он do-auto-fill

Убедитесь, что функция выше загружена и помещена в исходный файл Emacs:

 (defadvice do-auto-fill (after my-make-continuation-line-by-fill activate)(my-make-continuation-line-by-fill)) (ad-activate 'do-auto-fill) 
  • Как использовать Emacs с Python
  • Quickhelp для Python в Emacs autocomplete.el?
  • Ошибка преобразования Unicode с использованием Python в Emacs
  • Задание интерпретатора python из virtualenv в emacs
  • Управление смертью помощника
  • IPython в Emacs. Быстрая оценка кода
  • Как загрузить текущий буфер в интерпретатор Python в Emacs?
  • Emacs 23 и iPython
  • Python - лучший язык программирования в мире.