🔎
zshでfzfを使ってコマンドと移動履歴を検索する
マシンを新調するといつもすぐ忘れるので自分用のメモとして
やりたいこと
ターミナルで ^r
、^q
のショートカットを使って履歴を検索したい
^r
をコマンド履歴検索に
^q
を移動履歴検索にあててます
環境
- Mac os 13.4
- zsh 5.9
- fzf 0.42.0
手順
fzf のインストール
公式の通り
brew install fzf
.zshrc の記述
~/.zshrc
に以下の内容を記述していきます
^r
を使ってコマンド履歴を検索
# fzf history
function fzf-select-history() {
BUFFER=$(history -n -r 1 | fzf --query "$LBUFFER" --reverse)
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history
^q
を使って移動履歴を検索
# fzf cdr
function fzf-cdr() {
local selected_dir=$(cdr -l | awk '{ print $2 }' | fzf --reverse)
if [ -n "$selected_dir" ]; then
BUFFER="cd ${selected_dir}"
zle accept-line
fi
zle clear-screen
}
zle -N fzf-cdr
setopt noflowcontrol
bindkey '^q' fzf-cdr
^q
はデフォルトではバインドできないのでsetopt noflowcontrol
を設定
参考:https://qiita.com/ikm/items/1f2c7793944b1f6cc346
最終的な .zshrc
# 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
# fzf history
function fzf-select-history() {
BUFFER=$(history -n -r 1 | fzf --query "$LBUFFER" --reverse)
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history
# 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
# fzf cdr
function fzf-cdr() {
local selected_dir=$(cdr -l | awk '{ print $2 }' | fzf --reverse)
if [ -n "$selected_dir" ]; then
BUFFER="cd ${selected_dir}"
zle accept-line
fi
zle clear-screen
}
zle -N fzf-cdr
setopt noflowcontrol
bindkey '^q' fzf-cdr
Discussion