シンタックスハイライトされた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 答え

これは、 ポリモード で行うことができます。

(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 を2回目に呼び出すと、私のモードラインに PM それはまだアクティブです
追加された 著者 Lord Loh.,
OK、 python-mode に戻ってみると、魅力的です!私はこれまでにpythonモードを残していたことに気づいていませんでした...(BTW、私はサイトが私に許したら賞金を授与します。
追加された 著者 Lord Loh.,