Vimのコード折りたたみをどのように複製できますか?


28

Emacsでのコードの折りたたみ

ときどき、テキストのブロックを折りたたみたいです。Vimでは、ファズのない簡単な折りたたみが可能です。「マーカー」などの特殊文字やのような特定の正規表現を追加する必要はありません{{{。構造をいじらずに、領域を選択して折りたいと思います。

周りを見ると、Emacsのコードの折りたたみに関する質問がすでにあったようです。「完璧な解決策はない」と誰かが言った。たとえば、Vimで簡単なコード折りたたみのクリップを作成しました。

Vimプレーンフォールディング

ここに画像の説明を入力してください

+かなりシンプルで、地域を選択して折ります。
+永続的です。バッファを強制終了するか、Vimを閉じます。そして、ファイルを再度開きます。折り目はまだあります。
+折り畳まれたものを簡単に確認できるように、ハイライトバーが表示されます。

Vimには他にも多くの折りたたみ構成があります。私はEmacsに満足していますが、これは私が恋しいことの1つです。私が試した他の選択肢、例えばHideShow:

HideShow

ここに画像の説明を入力してください

の悪の代替hide-show minor mode。私はそれを使用できないことがわかりました:

-地域を選択して折り畳むことができません。コードブロックで折り畳まれます。

-ハイライトバーなどはありません。折りたたまれています。簡単に見逃してしまう可能性があります。

-それは永続的ではありません。ファイルを再度開くと、折り畳みはなくなります。

別のパッケージがあります、これを折ります

これを折ります

ここに画像の説明を入力してください

-それはかなり代替です。ただし、折り目の下のテキストが折り目の隣に配置されるため、インデントが乱れます...(?)

-領域を視覚的に選択して折りたたむことができます。しかし、それは意図を破るので、概要がめちゃくちゃになります。あまり便利ではありません。

-higlihgtingバーなどはありません。折りたたまれています。簡単に見逃してしまう可能性があります。

問題は何ですか?

Vimがどのように折り畳むかを再現したいと思います。しかし、私が周りを検索したとき、Emacsでそれを行うのは非常に難しいようです。だから、emacsやそのアーキテクチャにこれを複製するのを難しくしているものがあるのだろうか?制限は何ですか?


2
質問が広すぎると感じたので、私はそれに基づいて閉会することに投票しました。オリジナルのポスターは、求められている機能の一部を提供するいくつかのライブラリを選択し、必要に応じてそれらを結合/変更することをお勧めします。OPが特定の機能の実装/変更で問題が発生した場合は、その1つの問題に限定した特定の質問を投稿してください。OPはおそらく望ましい視覚効果を達成できますが、時間の経過とともに進行する進行中のプロジェクトになるように準備する必要があります。
法律家

3
必要な折りたたみ機能を説明してください。原則として、このサイトの人々がVimコードの折りたたみがどのように機能するかを知ることを期待することはできません。あなたが望むものについてあなたが提供する唯一の情報は一例のみを示すアニメーションであり、とにかく私はそれが何を示しているのか分かりません:彼らはあなたが使用したコマンド、カーソルをこのまたはその場所に移動した理由などを表示しませんさらに、一般的なブラウザではループで再生されるため、リピートがいつ開始されるかを判断することはできません。
ジル「SO-悪であるのをやめる」

3
この質問から保留を解除する必要があります。現在のところ、それはかなり具体的です。質問への回答がないことは、それを閉じる正当な理由ではありません。
イスタ

2
「thing-at-point-utils.el」からのar-hide-region-atpt、ar-show-region-atpt、github.com / andreas-roehler / thing-at-point-utils- ブロックを解除してください通常の答えかもしれません。
アンドレアスレーラー

1
私が理解しているように、質問は基本的に次のとおりです:「誰か:Vimにある正確なコード折りたたみ機能を提供するEmacsのライブラリ全体を書いてください。」いくつかのコメントと投票で十分だと思いますこれを見たい人は現実になります。ただし、これがどのように答えに合理的に適合するかはわかりません-提案された新しいライブラリは、問題とバグ修正とともに維持する必要があります。私も、コード折りたたみのためのクールな新機能を備えたライブラリ全体を作成する人を気にしません。
ローリスト

回答:


16

試してみてくださいvimish-fold

特徴

  • 付属のバッテリー:マイナーモードをアクティブにし、いくつかのコマンドをバインドすると、すべてが機能します。

  • 選択した地域で機能します。

  • 永続的です。ファイルを閉じても折り目は消えません。

  • 永続的であることに加えて、拡張性に優れており、悪影響を与えることなく多数の折り畳みを伴う数百のファイルを処理できます。

  • テキストのどの部分が折り畳まれているかは明らかです。

  • インデントなどを壊しません。

  • それはちょうど展開された折り畳みを折り畳むことができます(ああ、私の);

  • avyパッケージのファン向け:avy最小限のキーストロークでテキストを折りたたむことができます !

使用法

これらの機能の一部またはすべてのバインディングを作成します。

  • vimish-fold —選択した領域の基本的な折りたたみ。

  • vimish-fold-unfold—実際にこれをバインドする必要はありませんC-g。折りたたまれたテキストを表すヘッダーにポイントが置かれているときに使用 します。

  • vimish-fold-unfold-all —それでも、これは有用かもしれません。

  • vimish-fold-refold —はい、折りたたむことができます。

  • vimish-fold-avyavyテキストを折り畳むために使用します!

vimish-fold-mode永続的な折りたたみを行うモードを選択的に切り替えることも、単にどこでもアクティブにすることもできます。

(vimish-fold-global-mode 1)

推奨されるキーバインディングはありますか?C ++モードのときにどのバインディングを使用しますか?Cモード?Pythonモード?Lispモード?ELispモード?JavaScriptモード?
Reb.Cabin

1
@ Reb.Cabin、これはモード固有のパッケージではないため、グローバルキーバインディングが最適です。私はキーコードを使用しないキーバインディングを使用しており、ほとんどの人はそれらを少し奇妙だと思っているでしょう、現在私は持っています:menu v fvimish-foldmenu v avimish-fold-avymenu v uvimish-fold-unfold-allmenu v vvimish-fold-refold。ほとんどの私のキーバインドはこのようなもので、これが私の設定です。
マークカルポフ

これは邪悪な動きやテキストオブジェクトと統合されますか?
PythonNut

1
うーん...私はPRの仕事を始めます。
PythonNut

1
私は、1つには、Vimish-foldがまったく使用できないことを発見しました。おそらく、vimでコードの折りたたみに慣れている人にとっては直感的なのかもしれません...わかりません。また、私はなぜorg-modeでの折りたたみがうまく機能するのか理解できませんが、Emacsにはまだ良いコード折りたたみがありません
...-kjo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.