#はじめに
ターミナル上でコマンドを貼り付けたと思ったらさっきコピペしたソースコードがまるまる残っててコマンド履歴が悲惨なことになったりしたことありませんか?
Zshはコマンド共有などコマンドに対して便利な機能がたくさんありますが、そのせいで間違ったコマンドを叩いてしまったときに履歴をうまく修正ができないときがあります。
ときにはこんな悲劇を引き起こしてしまうこともあるのです。
#最初に注意
まぁ、賢明な読者諸氏なら分かると思いますが過去記事の
source ~/.zsh_historyは絶対に実行してはいけない(戒め
にあるとおり
$ source ~/.zsh_history
は間違いですし、絶対やってはいけません。(戒め
source
コマンドは設定を更新させるコマンドではなくファイルに書かれたコマンドを現在のシェルで実行するコマンドです。(zshrcやvimrcにかかれている命令を実行して設定を反映させている)
権限次第ですが、今まで実行したコマンドを頭から実行するこの世の地獄をみることになります。
#間違えたコマンドの履歴を消すには
##コマンド履歴の修正
コマンドの履歴を修正する方法なら探せば色んなサイトに書いてあります。
今回はよく知られている2つの方法を書いておきます。
###~/.zsh_historyを修正する
一つは、~/.zsh_historyをエディタで開いて当該箇所を修正する方法です。
$ vim ~/.zsh_history
しかし、修正したいコマンドがまだ記録されていない場合があります。
ファイル上ではなくバッファ上に履歴がある場合があるからです。
その場合はバッファ上にあるコマンド履歴を.zsh_historyに書き出させるために一度、exit
コマンドを使ってターミナルを閉じてから開き直します。
$ exit
$ vim ~/.zsh_history
これにより、バッファ上のコマンド履歴を.zsh_historyに反映させることができるのでそこから編集します。
###historyコマンドを使用する
もう一つは、historyコマンドを使う方法です。
$ history
$ history -d {番号}
例) $ history -d 8931
historyコマンドで過去に実行したコマンドとその番号を控えてhistory -d {番号}
で消す方法です。
しかし、こちらの方法は僕の環境ではうまくいきませんでした。(謎)
##履歴の修正を反映する
問題はこっちです。
環境次第ではうまく反映されないので散々です。
僕もここで一年くらい苦しんでいました。
コマンド履歴の修正を反映するには、以下のコマンドを使います。
$ fc -R ~/.zsh_history
これで~/.zsh_history上の修正したデータを上手く反映することができました。
#まとめ
1.exit
コマンドでターミナルを一度閉じる。
2.ターミナルを開き直してエディタを使って~/.zsh_historyの消したいコマンドの部分を削除して修正する。
3.fc -R
で修正を反映させる。
$ exit
$ vim ~/.zsh_history
$ fc -R ~/.zsh_history
以上。
#終わりに
さっきやっと修正する方法が見つかったので衝動的に書きました。
既出だったらごめんなさい。
他にも困ってるひとがいたら、これを見て上手くいくといいなぁ。