3

Ctrlbash の reverse-i-search 機能は便利ですが、キーバインディング ( + )にバインドされているように見えるという点で、他のほとんどの bash コマンドとは異なりますR。代わりにエイリアスまたは入力コマンドを使用して、ユーザーがこの機能をトリガーするにはどうすればよいですか?

4

2 に答える 2

5

reverse-i-search 関数は実際には readline 関数 (reverse-search-history) であり、bash 組み込み関数 (man builtin またはbash リファレンス マニュアルの組み込みコマンドを参照) ではありません。私の知る限り、キーにバインドする以外に readline 関数を呼び出す方法はありません。

これらの関数へのすべての readline キー バインドは、" bind -l -p" を使用して確認できます。バインド可能な readline コマンドのリストは、リファレンス マニュアルにも記載されています。

コマンドをいつでも使用しhistoryて履歴のリストを取得し、grep探しているものを見つけるために使用できます。私自身、これは便利だと思います:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"

実行するhists somethingと、一致するすべてのコマンドのリストが表示されますsomething。あとは !# を実行してコマンドを実行するだけです。例えば:

bash-3.2$ hists emacs
   30 emacs
  128 emacs
  129 emacs
  204 emacs
  310 emacs .bash_history
  324 emacs Documents/todo.txt
bash-3.2$ !324

それはまさにあなたが探しているものではありませんが、私ができる限り近いものです.

于 2009-02-24T20:59:17.500 に答える
5

bash または history (3readline) の man ページの "History Expansion > Event Designators" の下を見ると、この種のことを行うためのコマンドが表示されます。

!?prof?

「prof」を含む最新のコマンドが表示され、すぐに実行されます。コマンドを実行せずに印刷したい場合は、「:p」を追加できます

!?prof?:p

コマンド ラインでコマンドを編集するには、上記の例を使用して、次のように入力します。

!?prof

(Enter を押さないでください) M-^ を押します

これらは bash の拡張機能を使用します。最新の一致のみを取得します。

スクリプトまたはエイリアスを作成する場合は、bash のマニュアル ページで組み込みコマンド「fc」および「history」(-p または -s) を参照してください。また、「shopt -s histreedit」。

エイリアスの例を次に示します。

alias dothis='`history -p "!?jpg?"`'

(これらは一重引用符のすぐ内側の逆引用符です)。

これらのコマンドのいくつかを使用して、クールな「s/old/new」やその他のことも実行できます。

于 2009-04-11T03:34:05.053 に答える