LoginSignup
4
1

More than 3 years have passed since last update.

コマンド履歴を修正してもうまく反映されないときに

Posted at

はじめに

ターミナル上でコマンドを貼り付けたと思ったらさっきコピペしたソースコードがまるまる残っててコマンド履歴が悲惨なことになったりしたことありませんか?
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

以上。

終わりに

さっきやっと修正する方法が見つかったので衝動的に書きました。
既出だったらごめんなさい。
他にも困ってるひとがいたら、これを見て上手くいくといいなぁ。

参考

間違って入力したコマンドのhistoryの削除 - Qiita

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1