解決策を見つけるために頭を書くことはできません。シンプルReadlineでジョブを編集します。大きな単語が終わるまで、つまり次の空白文字(dE
vimから)まで文字を削除したいと思います。
具体的には、特定のキーシーケンスを押すと、
> 2234I567.890 32345678
なります
> 2234I 32345678
ここでカーソル位置は で表されますI
。
~/.inputrc
これを達成するために追加しようとしているものは次のとおりです。
最初の試み:
"\eF": vi-fWord "\eD": "\eF\C-w"
これにより、将来大きな単語が削除されますが、カーソルを離すと正しく機能しません。存在する言葉。この場合、単語全体が削除されます。
2回目の試み:
"\eF": vi-fWord "\C-x1": kill-region "\eD": "\C-@\eF\C-x1 "
これしなければならないもう動作していませんか?少なくとも\C-@\eF\C-x1
コマンドラインから手動でキーシーケンス全体を削除すると機能します。しかし、奇妙なことは、\eD
キーを押しても何も起こらないということです。
- 私は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ライブラリを使用するすべてのアプリケーションに適用されます。