zsh のプリコンパイルされたコマンドライン入力

zsh のプリコンパイルされたコマンドライン入力

私は最近Ubuntu 12.04 64ビットマシンをセットアップしました。tmux多くのウィンドウが開いている場合、それらはすべて翻訳シェルとして、それらのいくつかはchroot通常環境と同じホームフォルダを使用する環境。

シェルでランダムなコマンド (あらゆる種類のコマンドですが、ほとんどはファイル操作、vi、chroot 環境内外での build/make コマンド) をしばらく実行すると、各シェルは過去の履歴からプリコンパイルされたコマンドをいくつかすぐに表示し始めます。何かを入力したり、以前の履歴を検索したりする前に、Ctrl-Q などでそれらのコマンドを削除する必要があります。

さらに厄介なのは、プリコンパイルされたコマンドの先頭の文字を誤って入力し、その行を削除して独自のコマンドを入力すると、次のプロンプトでそれらの余分な文字も入力されることです。この変更された入力は、zsh 履歴ファイルに表示されずに、どんどん大きくなります。

.zsh_history ファイルを削除するか、新しいシェルを作成すると、問題はごく短期間解決されますが、しばらくすると (シェルを数分間使用すると) 再び発生し、問題が再発します。

これは、前のコマンドからシェルに戻って、しばらく経ってからプロンプトがどのように表示されるかを示した例です。

[10:59:14] user:Build git:(master*) $ schroot -c full32 -- antls -l

プロンプトは明らかに $ で終わるはずであり、その後に続くのは、ant前の発生時に Ctrl-Q で行を削除する前に誤って入力したゴミであることに注意してください。

文脈上、私はオーマイズッシュとともにジェフガーサイドテーマとギットファストプラグイン。chrootにはシュルート次の構成で:

[precise-full32]
description=Full 32bits dev environment
aliases=full32
type=directory
directory=/opt/chroot/full32
users=user
root-groups=root
personality=linux
preserve-environment=true

私は途方に暮れており、ここでも他の場所でも説明されているような問題は見つかりませんでした。この迷惑な動作の原因について何か手がかりはありますか?

答え1

emacsキーマップ(d'oh-my-zshまたはカスタム設定経由)を使用していると思います...確認してください

$ bindkey | grep '\^Q'
"^Q" push-line

そして、push-lineウィジェットはまさにあなたが迷惑だと言う目的のために設計されています。長いコマンドを入力しましたが、いくつかの手順を忘れてしまいました...そこで、を介して開始しpush-lineCTRL-Q新しいプロンプトを取得し、それをうまく行い、その後以前入力した(まだ実行されていない)コマンドが返されます:

$ `cp /something/foo/bar to/another/long/path`  # to/another/long/path does not exist
[CTRL-Q]
$ mkdir to/another/long/path
[ENTER]
$ `cp /something/foo/bar to/another/long/path`  # appears again and I can execute it via [ENTER] without retyping

ということで、長い話は短くします。

CTRL-Uのデフォルトのバインディングを使用するか、そのショートカットに慣れている場合はkill-whole-line再定義します。CTRL-Q

$ bindkey '^Q' kill-whole-line

関連情報