大きな単語または次の空白文字が終わるまで前方に削除する方法

大きな単語または次の空白文字が終わるまで前方に削除する方法

解決策を見つけるために頭を書くことはできません。シンプルReadlineでジョブを編集します。大きな単語が終わるまで、つまり次の空白文字(dEvimから)まで文字を削除したいと思います。

具体的には、特定のキーシーケンスを押すと、

> 2234I567.890 32345678

なります

> 2234I 32345678

ここでカーソル位置は で表されますI

~/.inputrcこれを達成するために追加しようとしているものは次のとおりです。

  1. 最初の試み:

    "\eF": vi-fWord
    "\eD": "\eF\C-w"
    

これにより、将来大きな単語が削除されますが、カーソルを離すと正しく機能しません。存在する言葉。この場合、単語全体が削除されます。

  1. 2回目の試み:

    "\eF": vi-fWord
    "\C-x1": kill-region
    "\eD": "\C-@\eF\C-x1 "
    

これしなければならないもう動作していませんか?少なくとも\C-@\eF\C-x1コマンドラインから手動でキーシーケンス全体を削除すると機能します。しかし、奇妙なことは、\eDキーを押しても何も起こらないということです。

  1. 私はviモードコマンドvi-delete-toなどを使用することも検討しましたが、Readline viモードに関するドキュメントがまったくないので、どうすればいいかわかりません。

だから助けを求めにここまで来ました。

ベストアンサー1

さて、いよいよ成功しました。

set-mark関数を別のキーシーケンス(たとえば)に再マッピングし、\C-x2デフォルト値をこの新しいマッピングに置き換えます。\C-@それでは、すべてが大丈夫です。

おそらくこれはバグの可能性があり、\C-@ReadlineマクロのRHSに表示された場合は期待どおりに実行されません。

Alt以下は、+ D削除入力を次のスペースまたは大きな単語(vim用語)に渡す設定です。

"\C-x0": vi-eWord
"\C-x1": kill-region
"\C-x2": set-mark
"\eF": "\C-x0\C-f"
"\eD": "\C-x2\eF\C-x1"

たとえば、シェル固有のReadline機能を使用しないため、shell-forward-wordキーバインディングはbash、(i)pythonなどのReadlineライブラリを使用するすべてのアプリケーションに適用されます。

おすすめ記事