zshとpecoでコマンド入力作業を快適に

zshとpecoを活用すると、コマンド入力作業が快適になります。

過去に入力したコマンドを再度実行したいときに特に役立ちますが、設定方法によっては他にも活用方法があります。

目次

できること

まず、今回設定した内容でできることを紹介します。

  • コマンド候補の表示( zsh-autosuggestions を活用)
  • コマンドが正常に入力されいてるか色分け表示( zsh-syntax-highlighting を活用)
  • pecoの活用
    • ctrl + r で過去に実行したコマンドを選択できるようにする。
    • ctrl + f で過去に移動したことのあるディレクトリを選択できるようにする。
    • deb dea で目的のdockerコンテナに接続

作業

現在のシェル確認

macOS 10.15 Catalina から zsh がデフォルトシェルに設定されてます。現在のシェルは以下で確認できます。

$ echo $SHELL
/bin/zsh

インストール

「zshのプラグイン」と「peco」をインストールします。

# zshのプラグインをインストール
brew install zsh-autosuggestions
brew install zsh-syntax-highlighting

# pecoをインストール
brew install peco

pecoの動作確認

pecoの動作確認をします。

以下のように、パイプ(|)を通じて、他のコマンドの出力内容をpecoの入力内容として渡します。

コマンドの出力結果をフィルタすることができ、目的情報を探しやすくなります。

$ history | peco

zshの設定

次に、zshの設定を行います。~/.zshrc に設定します。

zshで読み込まれる設定ファイル
touch ~/.zshrc
vi ~/.zshrc 

.zshrc には以下内容を設定しました。

# -------------------------------------------------
# 環境変数設定
export PATH=$PATH
export LANG=ja_JP.UTF-8
# -------------------------------------------------

# -------------------------------------------------
# Alias設定
alias v='vim'
# -------------------------------------------------

# -------------------------------------------------
# オプション設定

# History設定
HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000
setopt share_history
setopt hist_ignore_dups
setopt hist_ignore_all_dups
setopt hist_ignore_space
setopt hist_reduce_blanks

setopt print_eight_bit
# -------------------------------------------------

# -------------------------------------------------
# プラグイン有効化
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# -------------------------------------------------

# -------------------------------------------------
# pecoの活用1
# ctrl + r で過去に実行したコマンドを選択できるようにする。
function peco-select-history() {
  BUFFER=$(\history -n -r 1 | peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history
# -------------------------------------------------

# -------------------------------------------------
# pecoの活用2
# 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

# 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
# -------------------------------------------------

# -------------------------------------------------
# pecoの活用3
# deで目的のdockerコンテナに接続
alias deb='docker exec -it $(docker ps | peco | cut -d " " -f 1) /bin/bash'
alias dea='docker exec -it $(docker ps | peco | cut -d " " -f 1) /bin/ash'
# -------------------------------------------------

以下の記事情報を参考にさせていただきました。

zshの反映

source ~/.zshrc

参考

よかったらシェアしてね!
目次