web-dev-qa-db-ja.com

現在のセッションの履歴にプッシュせずにzshでコマンドを実行するにはどうすればよいですか?

Bashとzshは、スペースを前に付けた場合、コマンドを履歴に入れないという省略形をサポートしています。これはセッション全体でうまく機能します(もしsetopt histignorespace)。ただし、コマンドは現在のセッションの履歴に残っています。

コマンドを現在のセッションの履歴に配置しないようにするにはどうすればよいですか(または実行後に削除する)。

38
Nevir

setopt histignorespace、コマンドは現在のセッション履歴から削除されます。を押してテストした場合 Up コマンドラインがまだそこにあることを確認すると、それは機能です。

コマンドが消える前に次のコマンドが入力されるまで、コマンドは内部履歴に残り、その行を簡単に再利用または編集できることに注意してください。別のコマンドを入力せずにすぐに消したい場合は、スペースを入力してReturnキーを押します。

スペースで始まらない、またはhistignorespaceオプションがオンになっていないコマンドを入力した場合、 現在のセッションの履歴からコマンドを削除する方法はありません (履歴ファイルは外部で編集できます)。

zshの代わりにbashを使用していた場合、これらの手法を使用してコマンドを履歴から削除できます:

上矢印を押して行に移動し、Ctrl-Uを押して行を削除します。 Enterキーを押すのではなく、上矢印または下矢印を押して別の履歴行に移動します。

消去したい行が空行に置き換わります。これがどこに文書化されているかはわかりませんが、数年前に偶然に気づきました...消去は履歴行のかなり完全な編集です:)。

たとえば、^ Uを押して行をクリアする代わりに、何かを変更します。 DIT'T HIT ENTERとすると、新しい履歴エントリが作成されます。代わりに上矢印または下矢印を押してください。上/下矢印を使用して表示に戻すとわかるように、行が履歴で永続的に変更されます。

永続的には、上矢印キーまたは下矢印キーを押した後、新しいコマンドまたは編集されたコマンドでEnterキーを押しても、行は変更されたままになることを意味します。編集された行だけが元のファイルを置き換えて履歴に残り、そのシェルを終了すると通常どおり$ HISTFILEに保存されます。

^ Cを押すと、編集を中止したり、^ U消去を行ったりして、履歴への影響を停止できます。

もう1つの方法は、履歴の行番号がわかっている場合はhistory -dを使用することです。例えば:

 $の履歴| grep履歴|尾
 [...無関係、削除...] 
 10113ヘルプ履歴
 10114履歴| grep履歴|尾
 
 $履歴-d 10113 
 
 $履歴| grep履歴|尾
 [...無関係、削除...] 
 10113履歴-d 10113 
 10114履歴| grep履歴|尾

help history行はhistory -d 10114によって削除されました

2
cas