モーダル編集に使用できるパッケージは何ですか?


13

Emacsでモーダル編集に使用できるパッケージは何ですか?何を使用し、その理由は?

回答ごとに1つのパッケージを投稿してみましょう。すべてのパッケージの言及の利点と欠点を提案します。


モーダル編集の定義は次のとおりです(Wikipeadiaの専用記事は見つかりませんでした)。

モーダル編集 -ユーザーが通常キーを使用して文字を挿入せずにテキストに対してさまざまな操作を実行する「通常モード」と、キーが対応する文字を挿入する「挿入モード」を定期的に切り替えるときのテキスト編集のスタイル。もちろん、もっと多くのモードがあるかもしれません。最新のエディターのほとんどはモーダルではありません。モーダルテキストエディターの例はVi(Vim)です。


そして、「モーダル編集」とは何ですか?
リンディダンサー

@Lindydancer、私は質問に概念を説明する私の試みを追加しました。
マークカルポフ

回答:


13

evilE xtensible VI L Emacsのためのアヤ

疑わしい名前は別として、Emacsでのエミュレーションに関しては(そして、おそらく他の場所でも)evil最先端の技術vimです。他のVimエミュレーションパッケージが避ける多くの機能をサポートしています。

  • vim テキストオブジェクト
  • vim 登録
  • vim キーボードマクロ
  • ex コマンド

長所

  • との主要な互換性は、Emacsのないシステムに切り替えても筋肉の記憶を失わないことvim意味します。
  • 非常に成熟しており、広く使用されています(たとえば、多くのコミュニティパッケージ)
    • に多くのパッケージvimが移植されましたevil
  • vim スタイル文法はモジュール式であり、ユーザー拡張に非常に適しています
  • evil それ自体は非常に拡張性があります。独自のテキストオブジェクト、演算子、モーションを作成してください!

短所

  • 他のパッケージでうまく動作させるためには、おそらく多少の手間がかかるでしょう
    • 幸いなことにevil、最も一般的なユースケースを途方もなく簡単にします。
  • evil非常に複雑なシステムです。邪悪なコアをハッキングすることは非常に複雑になります。
  • vimキーバインディングは必ずしも人間工学的に最適ではありません。時には、異なるシステムに移植したときに少しarbitrary意的に感じることがあります。
  • BitBucket(mercurial)でホストされているので、これで何ができます。

私は、頭字語見つかった悪のためにEmacsのための拡張可能なVI層 悪趣味の少し。
名前

@Nameは私の考えではなく、どのようにそうですか?
PythonNut

辞書から:evil =深く不道徳で悪意のある、悪魔の力を具現化または関連させる、有害、非常に不快な、
名前

5
@Nameに彼/彼女自身に「名前」という名前を付けた人として、物事に名前を付ける際にユーモアの使用を感謝すると思います。:-)悪の場合、それは皮肉です(en.wikipedia.org/wiki/Irony#Definitionsを参照)。私は、これがEmacsパッケージに与えられた最高の名前の1つだと思い、それを利点として挙げます!
タジウス

@PythonNut Bitbucketの使用は、Mercurialの使用よりも問題が少ない(実際にはまったく問題ない)と思います。
タジウス

11

god-modehttps://github.com/chrisdone/god-mode)があります。これは標準のEmacsキーバインディングを使用しますが、修飾子を押さえる必要がありません。god-modeが有効C-...な場合、バインディングは修飾子を必要とせず、M-...バインディングは修飾子ではなくプレフィックスを使用します。

githubページの例:

変更前:Cp Ck Cn M- ^)Cj Cy Mr Cx zz M-2 Mg Mg Cx Cs

後:pkng ^)jygr。。2 ggx


1
答えを広げてください、それは単なるリンクではありません。
マークカルポフ

@ステファン-私はあなたの答えを少し広げる自由を取りました。自由に変更してください。
グルーカス

glucas:ありがとう!@マーク:ゴッドモードについてこれ以上何も知らないので、答えを簡単に拡張できませんでした。グルカのような誰かが空白を埋めてくれることを期待して投稿しました。
ステファン

6

私自身を追加して、励ましてくれた@Markに感謝します。

Xah Fly Keys

ergoemacs-modeの長年の経験から、MOSTの効率的なシステムを目指して、emacsのために一から設計されました。重要な選択は、重要な頻度と重要な押しやすいスコアの統計に基づいて、可能な限り科学に基づいています。最も頻繁に使用されるコマンドは、最も使いやすいキーにマップされます。グループ化やキーバインドバイグラムなどの他の問題も、3年間の週ごとの実験から考慮されます。

興味深い点:

  • すべてのCxコマンドは、2〜3個の単一キーのシーケンスで実行されます。xah-fly-keysでは、Cxは必要ありません。M-も必要ではありません。
  • CtrlまたはMetaをバインドしないため(C-7、C-8を除くが、必須ではない)、GNU emacsのキーと競合しません。挿入モードでxah-fly-keysをオンにし、GNU Emacsを通常の方法で使用できます。
  • また、どのコマンドセットが最大の編集効率をもたらすかを検討しました。そのため、パッケージでは〜80個のカスタム編集コマンドが使用されます。(たとえば、copyは選択がない場合に現在の行をコピーします。GNUEmacsの〜6種類のupper / lower / region / no-regionの代わりに、大文字と小文字を切り替える1つのコマンドです。)
  • 実装は可能な限り単純です。マクロも、アドバイスも、キーの複雑な再マッピングも、いくつかのフックのみが使用されます。(良いか悪いか?!)

短所:

  • 初めてviを習うように、採用するには1か月必要です。
  • あまり知られていない。今月公開されたばかりです。
  • 現在、Dvorakレイアウトのみをサポートしています。
  • 学習に便利なキーダイアグラムがありません(まだ)。
  • メジャーモードの場合、まだCcを使用する必要があります。(したがって、この問題を解決するためにgod-modeやhydraなどの他のパッケージを使用できます。)

私は作者ですので、無意識のうちに偏っている可能性があることに注意してください。コメントや修正をお気軽に。


他のキーボードレイアウトをサポートする可能性はありますか?ErgoEmacsがすることは知っています。私はそれを試してみるかもしれませんが、ドヴォルザークへの切り替えの水準は、カジュアルな実験には高すぎます。
PythonNut

@PythonNutはい、最優先です。私は一週間で願っています。主なものは、どのように実装したいかを示しています。
シャーリー

あ。とてもかっこいい。それが出てきたら、私はそれに旋回を与えます。
PythonNut

6

Modalkaは、モーダル編集ブロックの最新の子供でなければなりません。githubプロジェクトは10日間すべてのようです。コメントや評価を行うのに十分な使用時間はありませんが、次のように説明します。

これは、Emacsのモーダル編集への切り替えを支援するビルドキットです。パッケージの主な目標は、Emacsで可能な限り自然でネイティブなモーダル編集を行うことです。ハック、コーナーケース、エミュレーションはありません。必要な方法で編集を開始するだけです。

ドキュメントも比較し、対照的で、そのような他の一般的なモーダルソリューションとModalkaをevilgod-modeboon、など


4

ブーン

Boonは、モーダル編集用のあまり知られていないパッケージの1つです。Vi(またはVim)をエミュレートしませんが、Colemakキーボードレイアウトに最適化された元のレイアウトを提供します。

利点と設計原則

  • 最初に空間割り当て、次にニーモニック:コマンドへのキーの割り当ては、キーボード上のキーの位置に基づいて優先されます。キーキャップに印刷されているものは何でも二次的な関心事です。

  • イージーフィンガーロール:一般的な組み合わせは、左/右交互または簡単な片手ロールのいずれかです。

  • 最もよく使用されるコマンドのホームロウと強い指の使用

  • 簡単なナビゲーション:多くのコマンドがナビゲーションにバインドされています。これにより、移動が容易になります。移動は領域定義として2倍になるため、操作コマンド(演算子)がより強力になります。

短所

  • 編集プリミティブのコレクションとキーボード上の配置は非常にユニークであるため、エディターとの対話方法を再学習する必要があります。

1
Boonがキーの内容を実際に気にせず、キーがColemakであることを強制するのは少し奇妙に聞こえます。レイアウトに依存しないように思えます。
PythonNut

@PythonNut、私は人々が何らかの形でキーを参照する必要があると思います:-)他のレイアウトで動作させることは完全に可能だと思います。
マークカルポフ

BoonはQWERTYとQWERTZをサポートしています。github.com/ jyp / booninstallationをご覧ください。それを反映するために答えを更新しました。
raju-bitter

3

Ergoemacsは、モーダル編集もサポートしています。viをエミュレートしませんが、最も頻繁に使用されるコマンドにはAltキーを使用します。例えば、カーソルを移動すると、Altキープラス右反転T.(QWERTYにそれがあるAlt+ jためleftAlt+ l右用、Alt+ iupおよびAlt+ kためdown)。文字または単語を削除するにはAlt、左手のホーム行キーを使用します。キーの選択は、コマンド頻度とキーの位置に基づいており、押しやすくなっています。

  • モーダル編集を開始するには、ユーザーがを押しf6ます。
    • 一度f6押されると、最も頻繁に使用されるキーはAltキーの組み合わせを必要としなくなりました。
    • したがって、QWERTYでは、jis leftjis rightiis up、およびkdownです)。
  • returnf6またはを押すと、モーダルコマンドモードが終了しますescape

伝統的なモーダルパラダイムに加えて、任意の可能準モーダルパラダイムがあるC-x、またはC-cキーの組み合わせは、(神モードのような)任意の改質剤を使用せずに到達します。

  • 準モーダルは、QWERTY apps ffor C-cで制御キーを押し下げ、QWERTY apps dforで開始しC-xます。
  • このキーシーケンスを完了する間、appsキーは押されると想定される修飾子のタイプを変更します。
  • コマンドが呼び出されると、ergoemacsは編集モードを再開します。
  • キーシーケンス中に、押したキーのタイプを変更することもできます。これは、appsもう一度キーを押すだけです。

コマンドキーを変更することに加えて、ergoemacs-modeを使用すると、キーシーケンスを入力中に変更できます。

  • キーシーケンスの途中でを押すと、プレフィックス引数を編集できますf2
  • 押すとbackspace、最後に押されたキーが戻ります。
  • Apps キーシーケンス中に押されたキーを変更できます。

ergoemacs-modeは、モードが基本キーに対して行うことをすべて尊重しようとします。たとえば、org-modeがに特別なキーを定義している場合next-line、ergoemacsはorg-mode でAlt+ kにこのコマンドを使用します。

利点:

  • ELPAのGNU Emacsの一部。
  • すぐに使用できる「ユニバーサル」なWindows / Linuxキーをサポートします。例:開く(C-o)、閉じる(C-w)、すべて選択(C-a)、コピー(C-c)、切り取り(C-x)、貼り付け(C-v)など
  • かなり人気があります。
  • Qwerty、dvorak、colemak、bepoなどの多くのレイアウトをサポートし、キーを調整してホーム行に配置するようにキーを調整します(QWERTYのMiはcolemakのMuになります)。
  • テーマを説明することにより、emacsでキーボードレイアウトの画像を表示します。
  • キーは、テーマを作成することにより、拡張システムを介してカスタマイズできます。
  • 任意のモーダルキーマップをセットアップできます(まだ文書化されていません)。

短所:

  • 起動時に安定版が遅い。
    • 不安定なマスターでは、最初の起動に時間がかかります(最小セットアップの場合は5秒以内)(私の起動の場合は20秒以内)
    • 2番目の2番目の起動ははるかに高速です(私の複雑なセットアップの場合、最大4秒です)。
    • これは、ergoemacs-modeがすべてのアクティブなキーマップをemacsで変更およびキャッシュしているためです。2回目の起動時に、これらの設定が保存されます。
  • 複雑なコード。

https://github.com/ergoemacs/ergoemacs-modeご覧ください


2

もう1つのセミモーダルオプションはHydraです。

https://github.com/abo-abo/hydra

ウェブサイトによると

設定でCc jとCc kをバインドしたと想像してください。Cc jとCc kを何らかの(任意の)シーケンスで呼び出したい場合。Hydraでできること:

  • Cc jjkk3j5kを押すと、Cc j Cc j Cc k Cc k M-3 Cc j M-5 Cc kを押すのと同じように、関数をバインドします。jまたはk以外のキーは、この状態を終了します。

  • このグループの関数にカスタムヒントを割り当てて、Ccを押した直後にjまたはkでフォローアップできることを確認します。

私は使っていませんが、面白そうです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.