Режим заполнения 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) 
  • как программа python сообщает, работает ли она в emacs?
  • Как я могу использовать режим Emacs Flymake для python с pyflakes и контрольным кодом pylint?
  • Запуск py.test от emacs
  • Управление отступом с Org-Babel
  • Режим Python в Emacs: нет такого файла или каталога, pdb
  • Как я могу использовать flycheck virtualenv
  • Emacs defadvice для функции python-mode
  • Как сделать режим Emacs Python генерировать TAB для отступа?
  •  
    Interesting Posts for Van-Lav

    Как упаковать виджет tkinter под существующим виджетами, который был упакован в левую сторону?

    Проверьте, существует ли строка в одном кадре данных в другом кадре данных

    Библиотека грамматического вывода?

    Добавление ошибки HDFStore – «Невозможно сериализовать столбец»

    конвертировать 64-битные окна даты в python

    Python: Как лучше всего разобрать простую грамматику?

    Python 3.3 Изображение TKinter не существует

    Flask Babel – 'translations / de / LC_MESSAGES / messages.po' отмечен как нечеткий, пропускающий

    Инструменты / рекомендации по управлению зависимостями приложений?

    bbox_to_anchor и loc в matplotlib

    Как ускорить анимацию choropleth Basemap Chapopleth

    Запись CSV-файла с помощью умляутов, вызывающих «кодек UnicodeEncodeError: 'ascii', не может кодировать символ"

    INSERT INTO и конкатенация строк с помощью Python

    Как напечатать строку, за которой следует результат функции в Python

    Swig tool и C ++. Быть слишком умным

    Python - лучший язык программирования в мире.