Problem
Interactive filterを使っていたりするとコマンドよりも結果をhistoryに残した方が便利なケースが度々あります。
# 例:fzfで選択したファイルをvimで開く
alias v='_vim_fzf'
_vim_fzf () {
local file
file=$(fzf +m -q "$1") && vim "$file"
}
上記の場合、historyを遡っても選んだファイルは出てきません。
Solution
Bashではhistory -s
を使います。
_vim_fzf () {
local file
file=$(fzf +m -q "$1") && history -s "vim $file" && vim "$file"
}
このように書き直すと、v
コマンドの代わりにvim [選んだファイル]
が履歴に残るのでCtrl-RやCtrl-Pでファイルを再び開くことが可能になります。
Further Work (Zsh)
Zshではprint -s
が相当するそうです。
$ print -s "alternative command"
$ history
# ...
# 99 print -s "alternative command"
# 100 alternative command
問題は上のようにprint
コマンド自体も保存されてしまうことです。もっと良い方法があれば教えてくださいmm