Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[Memo][Linux]bash環境にpecoを導入しました

以前から percol の流行りに気になっていたが、python製のため導入が面倒さそうなので保留 しました。最近、percolを元にgolangで書かれたpecoが出てきて導入しやすくなったと感じて 手を入れました。

1 peco で何か便利なのか

  • コマンド出力結果のインクリメントサーチが出来る
    • Bashコマンド履歴のインクリメントサーチが出来る
    • プロンプトでログファイルのインクリメントサーチが出来る
    • パイプラインでたのコマンドとの連携で色々出来ると思います

具体なイメージはgithubの README が分かりやすい

2 導入手順

一番簡単なのは peco バイナリを PATH に通る。

$ wget https://github.com/peco/peco/releases/download/v0.3.3/peco_linux_amd64.tar.gz
$ tar xzvf peco_linux_amd64.tar.gz 
$ tree peco_linux_amd64
peco_linux_amd64
├── Changes
├── README.md
└── peco

0 directories, 3 files
$ export PATH=`pwd`/peco_linux_amd64:$PATH
$ peco --version
peco: v0.3.3

3 bash履歴の検索をpecoインタフェースにする

下記内容を ~/.bashrc に追加する

# 重複履歴を無視
export HISTCONTROL=ignoreboth:erasedups

# 履歴保存対象から外す
export HISTIGNORE="fg*:bg*:history*:wmctrl*:exit*:ls -al:cd ~"

# コマンド履歴にコマンドを使ったの時刻を記録する
export HISTTIMEFORMAT='%Y%m%d %T '

export HISTSIZE=10000

# settings for peco
_replace_by_history() {
    local l=$(HISTTIMEFORMAT= history | cut -d" " -f4- | tac | sed -e 's/^\s*[0-9]*    \+\s\+//' | peco --query "$READLINE_LINE")
    READLINE_LINE="$l"
    READLINE_POINT=${#l}
}
bind -x '"\C-r": _replace_by_history'
bind    '"\C-xr": reverse-search-history'

これで、 Ctrl-r で起動されたBash履歴検索がpecoインタフェースに変わる。 元の検索インタフェースは Ctrl-x r で起動することも出来る。

4 pecoインタフェースのキーバンディングをカスタマイズする

$ mkdir ~/.config/peco
$ touch ~/.config/peco/config.json
$ cat <<_EOT_ > ~/.config/peco/config.json
{
    "Keymap": {
        "C-p": "peco.SelectPrevious",
        "C-n": "peco.SelectNext",
        "C-g": "peco.Cancel",
        "C-v": "peco.SelectNextPage",
        "C-@": "peco.ToggleSelectionAndSelectNext"
    }
}
_EOT_

Comments