🐠
fish-shell に追加された fish_should_add_to_history について
はじめに
普段使っている Mac mini で久しぶりに brew upgrade
したら fish-shell が 4.0.0 に更新されました。
メジャーバージョンアップなのでリリースノートを眺めていたら fish_should_add_to_history
という新しい関数が追加されているのを発見。
ちょっと試してみました。
概要
man fish_should_add_to_history
の説明にある通り、コマンドを履歴に残すかどうか制御するための関数です。
この関数はコマンドを履歴に追加する前に実行されて、その実行結果(戻り値)によりコマンドが履歴に残るかどうかが決まります。
- 戻り値が 0 の場合
- 履歴に残る
- 戻り値が 0 以外の場合
- 履歴に残らない
- 次のコマンドを実行するまでは
up
(↑
) やdown
(↓
) でコマンドを再表示して実行することは可能
- 次のコマンドを実行するまでは
- 履歴に残らない
この関数を実装しているかどうかにより、履歴保存の挙動は以下のように変わります。
- 実装していない場合
- スペースで始まらないコマンドは履歴に保存される
- デフォルトの挙動
- スペースで始まらないコマンドは履歴に保存される
- 実装している場合
- 実装した処理内容に準じて保存される
- 明示的に実装しなければ、スペースで始まるコマンドも履歴に保存される
- 実装した処理内容に準じて保存される
実装例
試しに実装してみたものです。
以下の二種類のコマンドが履歴に残らないようになっています。
- 引数がある場合は残しておきたいものの、引数がない場合は煩わしいので残しておきたくないコマンド
- 引数があっても煩わしいので残しておきたくないコマンド
~/.config/fish/functions/fish_should_add_to_history.fish
function fish_should_add_to_history
# 履歴に残したくないコマンド(引数なし)
set -l commands 'bg' 'cd' 'exit' 'fg' 'history' 'jobs' 'la' 'll' 'ls' 'pwd' 'top' 'tree'
contains $argv $commands; and return 1
# 履歴に残したくないコマンド(引数あり)
set -l commandsWithArgs 'which'
for c in $commandsWithArgs
string match -q -r "^$c" $argv; and return 1
end
return 0
end
実装次第では他にも色々できそう。
おわりに
普段はリリースノートを見たりしないんですが、思わぬところでこういう発見があったりしますね。
こういう便利な機能を見つけたら、積極的に利用していきたいものです。
Discussion