9

Emacs で大きくて毛むくじゃらの YAML ファイルを編集したいと考えています。ファイル構造はインデントによって暗示されます。行 A が 10 個のスペースでインデントされている場合、A は、10 個を超えるスペースでインデントされている後続のすべての行を含むセクションを開始します。これは、YAML を超えて使用されるかなり一般的な規則です。

私が本当に欲しいのは、この構造を尊重する定義を持つ emacs モードです。例えば:

  • forward-sexp角かっこのペアを一致させるのではなく、インデントによって sexp が暗示される場合、sexp をスキップしたいと思います。同様に、現在のセクションの終わりの後の行に移動したり、現在のセクションの次の兄弟セクションに移動したりするためのナビゲーション コマンドが他にもあることを望みます。
  • 現在のセクション、または現在のセクション以外のすべてを折りたたむコマンドが必要です。これは、outline-mode が現在のアウトライン セクションを折りたたむ方法と同様ですが、インデントによってセクションが定義されています。
  • インデントによって暗示されるように、モード ラインに現在のセクションについて役立つ情報を表示したいと思います。
  • 現在の行の祖先であるすべての行を自動的に強調表示するオプションがあればいいのにと思います。
  • 私が考えていない他のこと。

を見ましたyaml-modeが、何も役に立ちません。何人かが Python モードを試すように勧めてきましたが、この目的にはうまく機能しません。

一般的なインデント行モードは、誰かがずっと前に書いたようなもののように思えますが、存在する場合、私はそれを見つけることができません. それともoutline-mode、私が望むように動作するようにハックする方法はありますか?

提案をありがとう。

4

2 に答える 2

3

を使用outline-modeして設定outline-regexp" *"ても、私が望むものを正確に得ることはできませんが、かなりの量を得ることができます。たとえば、デフォルトhide-subtreeでバインドさC-c C-dれている は、上で説明した方法で現在のセクションを折りたたむようです。outline-forward-same-levelにバインドされてC-c C-fいる も、私が望んでいたことを行います。

まだ正しく動作しないものもあります。微調整する他の便利な方法が見つかった場合は、この回答を変更しますoutline-mode

これは José Antonio Ortega Ruiz の提案を少し修正したものです。

于 2013-01-08T03:27:41.790 に答える
1

次/現在の兄弟に移動するには、 functionを作成しました。ファイルをロードして使用しますM-x my-yaml-next-sibling。このパッケージはまだ初歩的ですが、非常に便利な IMO です!

update : この関数は実際のパッケージindent-toolsに成長しました。その最初の目標は、インデントのブロックでのナビゲーションです。同じインデントの次のノード、親などに移動します。次に、ブロックのインデント、コメント、折り畳みなどに便利です。

まだメルパではありませんが、進行中です。

于 2016-03-13T00:04:38.700 に答える