peco を使って zsh でコマンド履歴を便利にする

2023-08-31 635 words 2 mins read

私はシェルとして Zsh を使っています。 Zsh はコマンド補完がありますが、peco を使うと、 コマンドの履歴を便利に選択することができます。

下の図では apt とタイプした後に =Ctl-r" をタイプしています。 コマンド補完の候補が出てくるのがわかります。

ここでコマンドを選択するために Emacs のキーバインディングを 使うことができます。

図1: peco を起動した情愛

図1: peco を起動した情愛

1 この文書の設定できること

  • コマンド履歴の検索 (Ctl+r)
  • cd の履歴の検索 (Ctl+f)

2 参考文献

以下のサイトを参考にさせていただきました。

3 確認環境

確認した環境です。 私は Ubuntu MATE を使っていますが、Windows でも動くようです。

  • Host OS : Windows11 Pro
  • Guest OS : Ubuntu Mate 23.04 on VirtualBox

4 peco のインストール

peco をインストールするには次のようにします:

sudo apt -y install peco
ソースコード 1: peco の Ubuntu へのインストール

5 Zsh で peco を使うための設定

~/.zshrc に以下を追加します。

# ---------------------------------------
# peco
# https://www.instagram.com/pecotecooo/?hl=en
# ---------------------------------------

# A function for command history (Ctl-r)
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(\history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen1
}
zle -N peco-select-history
bindkey '^r' peco-select-history

# Setup cdr
if [[ -n $(echo ${^fpath}/chpwd_recent_dirs(N)) && -n $(echo ${^fpath}/cdr(N)) ]]; then
    autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
    add-zsh-hook chpwd chpwd_recent_dirs
    zstyle ':completion:*' recent-dirs-insert both
    zstyle ':chpwd:*' recent-dirs-default true
    zstyle ':chpwd:*' recent-dirs-max 1000
fi

# cd history (Ctrl+f)
function peco-cdr () {
    local selected_dir="$(cdr -l | sed 's/^[0-9]\+ \+//' | peco --prompt="cdr >" --query "$LBUFFER")"
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
}
zle -N peco-cdr
bindkey '^f' peco-cdr
# ---------------------------------------
ソースコード 2: Zsh で peco を使うための設定

6 使用方法

  • コマンド履歴の検索 (Ctl+r)
  • cd の履歴の検索 (Ctl+f)

Related Articles:


We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now
This website uses cookies to ensure you get the best experience on our website. Learn more Got it