bash
変更中のコマンドを実行しなくても履歴が変わるのはなぜですか?たとえば、次のように入力すると:
$ echo foo1
foo1
$ echo foo2
foo2
$ echo foo3
foo3
upその後、ダブルタップするとecho foo2
プロンプトが表示されます。私は押して2取得しますecho foo22
。これで終了(空行)に戻ります downdown。今履歴を検索してみると、echo foo22
コマンドを実行したことがないのにもわかります!
ただし、シェルを終了して別のシェルを開くと、元のコマンドが表示されます。私はこれらすべてが非常に混乱し、直観に反して、迷惑だと思います。
私は歴史の仕事が次のように動作したいと思います。
実際に実行されたコマンドのみが履歴に保存されます。
歴史は不変です。 (明示的に消去しない限り)
これを行う方法はありますか?
編集 - この質問は関連しているようです。Bash履歴の編集をキャンセルする方法はありますか?
ベストアンサー1
私はこれらすべてが非常に混乱し、直観に反して、迷惑だと思います。
これはあなたの意見です。各履歴行を編集できるだけでなく、独自のUNDO履歴を持つプログラミング言語に対話型REPLを実装しました。したがって、一度も実行されなかったコマンドがある可能性がありますが、上矢印を使用してそのコマンドに戻って元の状態に戻すことができます。
しかし、バッシュのように履歴編集内容は変更された行から外れ、ナビゲーション時にのみ履歴に保存されます。行を編集してから、その行から離れずに新しいコマンドで再送信しないでください。この特別な場合、編集内容は新しい履歴項目として保存されるため、履歴に保存されません。
ここにはパターンと理由があります!
新しいコマンドで送信する前に履歴行の編集を許可しないことは、明らかに反直感的で面倒です。
ヒストリーラインを離れて別のラインを見ている場合、ヒストリーラインの編集内容を失うことは直観に反して迷惑です。
考えられる解決策は次のとおりです。ユーザーが履歴行を編集するときに送信する新しい行を表す準備領域に保存します(記録を更新しません)。しかし:
これはまだ直観に反して怒りを引き起こします。ユーザーは行を編集できず、前の行を表示するには上矢印をダブルクリックし、編集に戻るには下矢印をダブルクリックします。これにより、ユーザーは編集されていない元の行を見ることができ、現在の(「記録0」)編集バッファ内の行の新しいバージョンを見つけるために履歴の前に移動する必要があります。
ユーザーが2つの異なる履歴行で2つの編集を行った場合はどうなりますか?最近のそのような編集内容が最新の編集内容によって静かに毀損されると、迷惑なことになります。
不変の記録を持つ唯一の方法は、同時に複数の一時編集を実行し、順序に関係なく新しいコマンドで送信できることです。しかし、このアプローチは混乱を招くことなく、現在のUIパラダイムに提示するのが難しいかもしれません。 「現在のUIパラダイム」は、ユーザーの位置と状態に関する視覚的な手がかり(ある場合)を含む画面の単一の編集ウィンドウにマップされたワークスペース全体(記録と新しい項目)です。
その履歴行に一時的な修正が含まれているかどうかを示す位置インジケータ(ユーザーに記録スペースの位置を示す小さな数字)が必要な場合があります。変更を永久に適用する(変更履歴)、行、一連の行、またはすべての行などに対する変更を取り消す方法