naichi's lab

3日後の自分(他人)への書き置き

【zsh、percol】percolで履歴検索、cd履歴ジャンプとか

久々にターミナル触ったらほとんど忘れてたのでリハビリ

iTerm+zsh入れてたんだけどあんまり使いこなせてないし、 これを機に気になってたoh-my-zshっての入れてみることにした。

さらに調べてる途中で見つけたpercolってのも入れてみた。

環境

  • 2017/02/28
  • Mac OS X El Capitan 10.11.6

oh-my-zsh

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

インストールはこれだけ。

~/.zshrc のZSH_THEMEは wedisagree にした。

path が消えたので ~/.zshrc に下記を追加した。

export PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
eval "$(rbenv init -)"

percol

sudo pip install percol してみたがエラー。

ぐぐったら easy_install pip すると直るよと書いてあったので試す。

入った

f:id:naichilab:20170228005320p:plain

percolでコマンド履歴検索

percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ

上記の通りなんだけど、~/.zshrc に下記を追加した

# ctrl+Rで履歴検索
# http://memo.sugyan.com/entry/20140611/1402487717
function percol_select_history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
    CURSOR=$#BUFFER             # move cursor
    zle -R -c                   # refresh
}
zle -N percol_select_history
bindkey '^R' percol_select_history

はてなの引用貼り付けしたらフォーマット死んだのでコピペしました。すいません。

ctrl+r 押すだけでコマンド履歴がpercolで表示される。

f:id:naichilab:20170228005455p:plain

そのまま単語入れればAND検索で絞り込める。 さらにEnter押せばプロンプトに入力されるのでそのまま再実行できる。

なんて便利なんだ・・・

percolでcd履歴ジャンプ

percol で z / autojump のようにディレクトリ高速ジャンプ - Slip Ahead Logging

またまた上記の通りなんだけど、~/.zshrc に下記を追加した

# percolで履歴ジャンプ
# http://stillpedant.hatenablog.com/entry/percol-cd-history
# {{{
# cd 履歴を記録
typeset -U chpwd_functions
CD_HISTORY_FILE=${HOME}/.cd_history_file # cd 履歴の記録先ファイル
function chpwd_record_history() {
    echo $PWD >> ${CD_HISTORY_FILE}
}
chpwd_functions=($chpwd_functions chpwd_record_history)

# percol を使って cd 履歴の中からディレクトリを選択
# 過去の訪問回数が多いほど選択候補の上に来る
function percol_get_destination_from_history() {
    sort ${CD_HISTORY_FILE} | uniq -c | sort -r | \
        sed -e 's/^[ ]*[0-9]*[ ]*//' | \
        sed -e s"/^${HOME//\//\\/}/~/" | \
        percol | xargs echo
}

# percol を使って cd 履歴の中からディレクトリを選択し cd するウィジェット
function percol_cd_history() {
    local destination=$(percol_get_destination_from_history)
    [ -n $destination ] && cd ${destination/#\~/${HOME}}
    zle reset-prompt
}
zle -N percol_cd_history

# percol を使って cd 履歴の中からディレクトリを選択し,現在のカーソル位置に挿入するウィジェット
function percol_insert_history() {
    local destination=$(percol_get_destination_from_history)
    if [ $? -eq 0 ]; then
        local new_left="${LBUFFER} ${destination} "
        BUFFER=${new_left}${RBUFFER}
        CURSOR=${#new_left}
    fi
    zle reset-prompt
}
zle -N percol_insert_history
# }}}

# C-x ; でディレクトリに cd
# C-x i でディレクトリを挿入
bindkey '^x;' percol_cd_history
bindkey '^xi' percol_insert_history

こちらもはてなの引用貼り付けしたらフォーマット死んだのでコピペしました。すいません。

引用元の最後の2行はエラーしたので消した。

ctrl + x -> ; でcd履歴からジャンプ
ctrl + x -> i で履歴パスをプロンプトに貼り付け

もちろんpercolなので履歴を自由に絞り込める

これも超便利

まとめ

フォルダ移動する際に cd ~/hogehoge みたいなのを記憶を頼りに打ってたから超楽になった・・・

どっかに 世界変わるわ って書かれてたけどこれは本当に変わるわ・・・

ありがとうありがとう