概要
普段 zsh を使っているが、Ctrl + r
でコマンド履歴から過去のコマンドを呼び出したいときに、タイポなどで実行してしまった不要な履歴が候補に含まれてしまうのが邪魔だった。
なので、それらを個別にキーワード指定して削除できるコマンドを自作してみた。(.zsh_history
に対して sed
コマンドを実行するのをちょっと楽にしただけ)
成果物
#!/bin/sh # # .zsh_history から指定した文字列が含まれる行を削除 # # params: # $1: コマンド履歴に含まれるキーワード # # sed コマンドは区切り文字が / なので、キーワードに含まれる / はエスケープする TARGET_KEYWORD=${1//\//\\/} sed -i -e "/$TARGET_KEYWORD/d" ~/.zsh_history
上記を任意のファイルに保存してパスを通せばOK。
自分の場合は delhis
というファイル名で保存して、delhis {削除したいコマンド履歴に含まれる文字列}
という風に実行できるようにした。
(e.g. delhis hoge
と実行すると hoge
だけでなく hoge fuga
や hoge/fuga
の履歴が削除される)
作った経緯
コマンドを実行するときにタイポだったり、オプションの指定順を間違ってコマンドを失敗させてしまうことがたまにあるので、それらが履歴に出てくるのが嫌だった。
例えば、hoge
というコマンドを実行したかったのに、hofe
としてしまった場合、次から ho
で検索すると hofe
まで出てきてしまう。
(以下は Warp のスクショ)
こういうときは無視するか、.zsh_history
から該当履歴の行を削除してしまえばいいのだが、簡単に消せればいいのになあと思って、Linux の勉強がてらに自作してみた。
sed
コマンドとか使ったことなかったし、シェルスクリプトも作ったことがほとんどなかったので少し勉強になった。
そもそもコマンドが失敗したときは .zsh_history
に残らないようにすればいいので(そういうことをしている記事もあったので)、また時間があるときにそこらへんを見てみようと思う。