Синтаксис подчеркивает суженные строки строки python как код

У меня есть код python, у которого есть некоторые длинные строковые литералы, содержащие больше кода на Python. Эти строки в большинстве случаев должны быть равномерно окрашены, как это происходит по умолчанию.

Тем не менее, я хотел бы иметь возможность несколько раз сузить мой буфер до любой из этих строк, а затем синтаксис emacs выделять их, как если бы они были кодом, а не строками внутри кода (т. Е. Как "" " не было в исходном буфере)

Есть ли способ сделать это, что не связано с большим количеством elisp?

ПРИМЕЧАНИЕ. Мне не нужно обязательно сужаться, просто лучше изменить подсветку синтаксиса, как в полном буфере, это будет путать ...

5
Не сузится ли только содержимое строки, не включая кавычки, решить проблему?
добавлено автор Louis Salin, источник
@jmlorenzi после того, как вы сузились, вы можете изменить основной режим, чтобы поддерживать все, что хотите. Затем измените его, как только вы расширяетесь. @lindydancer говорит о пакете string-edit , но он не будет поддерживать выделение, как вы хотите.
добавлено автор Louis Salin, источник
Некоторое время назад я видел, как кто-то делал что-то подобное в режиме HTML, но сейчас я помню, где я его видел. Во всяком случае, основная идея заключалась в том, чтобы скопировать встроенный код в новый буфер и отобразить его с использованием надлежащего основного режима. После этого последовательность волшебных клавиш (например, C-c C-c) скопирует результат назад, откуда он изначально был изначально. К сожалению, мне нужно было бы написать некоторый elisp, боюсь.
добавлено автор Daniel McPherson, источник
@JordonBiondo В моем сужении к строке (без кавычек) не изменяется подсветка ... также работает font-lock-fontify-buffer не помогает
добавлено автор Faito Dayo, источник
@Lindydancer Спасибо! Я думал, что что-то вроде этого должно быть выполнимым, но мое умение elisp действительно низкое ... Надеюсь, у меня есть время, чтобы попробовать и сделать это ...
добавлено автор Faito Dayo, источник

1 ответы

Это можно сделать с помощью polymode .

(require 'polymode)
(defcustom pm-host/python
  (pm-bchunkmode "python"
                 :mode 'python-mode
                 :font-lock-narrow nil)
  "Python host chunkmode"
  :group 'hostmodes
  :type 'object)

(defcustom pm-inner/python
  (pm-hbtchunkmode "python"
                   :mode 'python-mode
                   :head-reg  "\"\"\""
                   :tail-reg  "\"\"\"")
  "Python typical chunk."
  :group 'innermodes
  :type 'object)

(defcustom pm-poly/python
  (pm-polymode-one "python"
                   :hostmode 'pm-host/python
                   :innermode 'pm-inner/python)
  "Python typical polymode."
  :group 'polymodes
  :type 'object)

(define-polymode poly-python-mode pm-poly/python)
  1. C-x b test.py RET
  2. M-x poly-python-mode RET

В этом режиме трикотабельные строки выделяются как код python. (Обычно это не хорошая идея, но вы можете переключать ее).

enter image description here

В настоящее время polymode , похоже, возникают проблемы с обновлением блокировки шрифтов. Однако это должно работать на практике.

4
добавлено
@PythonNut Это не работает для меня ... Может быть, проблемы с блокировкой шрифтов вы упоминаете? Какие из этих проблем? Я использую Emacs 24.3.1
добавлено автор Faito Dayo, источник
Теперь я вижу ... Действительно, изменение текста заставляет обновить ... жаль, однако, не автоматичен. Во всяком случае, спасибо за ответ!
добавлено автор Faito Dayo, источник
@elethan, как я отмечаю в конце, кажется, есть некоторые проблемы, связанные с блокировкой шрифтов при переключении. Я изучаю его и, вероятно, создаст проблему, чтобы понять, можно ли ее решить.
добавлено автор PythonNut, источник
@elethan Ах, основные режимы не переключаются. ;) Вам нужно использовать python-mode , чтобы вернуться к не-полимоду.
добавлено автор PythonNut, источник
@jmlorenzi, что конкретно представляет собой проблема? Если проблема в том, что она не будет включена, попробуйте внести изменения в код python внутри кавычек. Это должно заставить его подчеркнуть. Это ошибка, о которой я говорил.
добавлено автор PythonNut, источник
Я надеюсь, что это работает для OP, но для меня это отлично работает! Вы говорите, что можете переключать его, но как вы это делаете? Я могу включить его, но не могу понять, как его отключить ...
добавлено автор Lord Loh., источник
Но когда я говорю, что я не могу отключить это, я имею в виду, что не могу понять команду. Я понимаю, что подсветка синтаксиса не исчезает, но когда я вызываю poly-python-mode второй раз, я все еще вижу PM в моей строке режима, что указывает он по-прежнему активен
добавлено автор Lord Loh., источник
OK, переход на python-mode работает как шарм! Я не понимал, что я когда-либо оставил режим python ... (BTW, я награду щедростью, как только сайт мне тоже поможет. Спасибо за ответ ... хотя это не мой вопрос, ха-ха!)
добавлено автор Lord Loh., источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community