27318


emacs でコマンドをヒストリから実行する際には、 helm (aka anything) が便利です。これ相当の機能ないし拡張スクリプトは、 zsh
にあるでしょうか

具体的にやりたいことは:

  * 履歴検索を開始すると、履歴一覧が表示される
  * 履歴一覧は、文字入力でインクリメンタルサーチができてそれによって絞られていく 
    * できれば、入力はスペースで区切られた複数の OR 条件として検索してほしい
  * 随時、 C-n, C-p などで一覧の項目を選択可能、 RET でその項目に確定

今の手元の zsh は、履歴検索時 (`C-r`) には、 bash のそれと同じ挙動をしていて、若干不便なため質問しています。


CC BY-SA 3.0
2016-07-03T18:04:00.693
27306
2016-07-04T08:04:03.917
2016-07-03T18:21:45.530
754
754
question
zsh
zsh の履歴検索で、 emacs でいう helm (aka anything) ありますか


私は[peco](https://github.com/peco/peco "peco/peco: Simplistic interactive
filtering
tool")とシェル関数を組み合わせて使っています。pecoは単一バイナリで動くので、ダウンロードして実行ファイルを`~/bin`あたりに置くだけで動きます。


CC BY-SA 3.0
2016-07-04T04:03:08.657
27318
2016-07-04T04:03:08.657
4010
27306
answer


@emasaka さんのアドバイスを参考に、調査などを行った結果、

peco を PATH に通し、以下を `.zshrc` に記述すると実現できました。

[code]

    function peco-history-selection() {
        BUFFER=$(
            history -n 1 |
                awk '{printf ("%d %s\n",NR,$0)}'|
                sort -k1,1 -r -n |
                sed 's/^[^ ]* //' |
                peco )
        CURSOR=${#BUFFER}
        zle reset-prompt
    }
    
    if type peco > /dev/null
    then
        zle -N peco-history-selection
        bindkey '^R' peco-history-selection
    fi
    
[/code]


CC BY-SA 3.0
2016-07-04T08:04:03.917
27321
2016-07-04T08:04:03.917
754
27306
answer