目次

「ソフトウェア」一覧に戻る

コマンド結果をフィルタリングするpeco



pecoとは

コマンド結果をフィルタリングしてくれます。


pecoインストール

Mac

homebrewを準備している場合
$ brew install peco


pecoの利用例

ps aux | peco


pecoを便利に使う設定

現在のディレクトリ以下のフォルダの一覧をpecoで表示

function find_cd() {
    cd "$(find . -type d | peco)"  
}
alias fc="find_cd"


zshのhistoryをpeco表示にする(Ctrl + r)

.zshrc
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-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history


過去移動したディレクトリに移動(Ctrl + f)

過去移動したディレクトリに移動します。
ctrl-fにバインドしています。

cdrの設定
# 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
    zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/chpwd-recent-dirs"
fi
# ### search a destination from cdr list
function peco-get-destination-from-cdr() {
  cdr -l | \
  sed -e 's/^[[:digit:]]*[[:blank:]]*//' | \
  peco --query "$LBUFFER"
}

### search a destination from cdr list and cd the destination
function peco-cdr() {
  local destination="$(peco-get-destination-from-cdr)"
  if [ -n "$destination" ]; then
    #BUFFER="cd $destination"
    BUFFER="cd `echo $selected_dir | awk '{print$2}'`"
    zle accept-line
  else
    zle reset-prompt
  fi
}
zle -N peco-cdr
bindkey '^f' peco-cdr


pecoでSSHを効率的にする(Ctrl + \)

簡易
alias s='ssh $(grep -iE "^host[[:space:]]+[^*]" ~/.ssh/config|peco|awk "{print \$2}")'
zsh
function peco-ssh () {
  local selected_host=$(awk '
  tolower($1)=="host" {
    for (i=2; i<=NF; i++) {
      if ($i !~ "[*?]") {
        print $i
      }
    }
  }
  ' ~/.ssh/config | sort | peco --query "$LBUFFER")
  if [ -n "$selected_host" ]; then
    BUFFER="ssh ${selected_host}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-ssh
bindkey '^\' peco-ssh
bash
function peco-ssh () {
  local selected_host=$(awk '
  tolower($1)=="host" {
    for (i=2; i<=NF; i++) {
      if ($i !~ "[*?]") {
        print $i
      }
    }
  }
  ' ~/.ssh/config | sort | peco --query "$LBUFFER")
  if [ -n "$selected_host" ]; then
    ssh ${selected_host}
  fi
}


pecoでmigemoを使う方法

migemoを使うことで、ローマ字入力のまま日本語をインクリメンタルサーチすることができます。
表示されるまでに、一瞬待たされます。

migemogrepの場合(推奨)

https://github.com/peco/migemogrep

$ brew tap peco/peco      #公式以外のリポジトリをフォーミュラとしてHomebrewに追加する
$ brew install migemogrep
または
$ go install github.com/peco/migemogrep@latest

~/.config/peco/config.json

{
    "CustomFilter": {
        "cmigemo": {
            "Cmd": "migemogrep",
            "Args": [ "$QUERY" ],
            "BufferThreshold": 10000
        }
    },
    "keymap": {
        "C-j": "peco.SelectDown",
        "C-k": "peco.SelectUp",
        "C-f": "peco.ScrollPageDown",
        "C-b": "peco.ScrollPageUp"
    }
}

ctrl + rで選択できるfilterにMigemoが追加されて、ローマ字から日本語の文章をサーチすることができるようになります。

pecoのデフォルトフィルタをMigemoにする。
{
    "CustomFilter": {
        "cmigemo": {
            "Cmd": "migemogrep",
            "Args": [ "$QUERY" ],
            "BufferThreshold": 10000
        }
    },
    "InitialFilter": "Migemo"
}


peco-cmigemoの場合(非推奨)

https://github.com/mattn/peco-cmigemo

.zshrc

export PATH=$PATH:$HOME/bin
$ brew install go
$ go install github.com/mattn/peco-cmigemo@latest
$ cp ~/bin/peco-cmigemo ~/.peco/peco-cmigemo
または
$ go build peco-cmigemo.go

$ brew install cmigemo
$ ln -s /usr/local/opt/cmigemo/share/migemo/utf-8 ~/.peco/dict     # homebrewで入れたcmigemoの辞書へシンボリックリンク

~/.config/peco/config.json

{
    "CustomMatcher": {
        "C/Migemo": [
            "c:/dev/peco-cmigemo/peco-cmigemo.exe",
            "$QUERY"
        ]
    }
}

実行モジュール peco-cmigemo と cmigemo が使う辞書(UTF-8である必要があります)は同じ位置に dict/migemo-dict という形で置く必要があります。


pecoのkeymapをvimライクにする

$HOME/.config/peco/config.json

{
    "keymap": {
        "C-j": "peco.SelectDown",
        "C-k": "peco.SelectUp",
        "C-f": "peco.ScrollPageDown",
        "C-b": "peco.ScrollPageUp"
    }
}


参考







「ソフトウェア」一覧に戻る