我最近設定了一台 ubuntu 12.04 64 位元機器。我用多路復用器有許多打開的窗口,它們都使用桀騁作為外殼,其中一些通過chroot使用與正常環境相同的主資料夾的環境。
在shell 中執行隨機命令一段時間後(各種類型,但主要是檔案操作、vi、在chroot 環境內和沒有chroot 環境的建置/make 命令),每個shell 開始立即顯示一些來自過去歷史記錄的預編譯命令,這是我需要的在我可以輸入任何內容或搜尋我以前的歷史記錄之前,例如使用 Ctrl-Q 刪除它。
額外令人煩惱的事實是,如果我錯誤地鍵入了預編譯命令前的任何字符,然後刪除該行並鍵入我自己的命令,在下一個提示符處我也會得到這些額外的字符。然後,修改後的輸入會不斷成長,而不會出現在 zsh 歷史檔案中。
如果我刪除 .zsh_history 文件,或建立新的 shell,問題會在很短的時間內解決,然後在不久之後(使用 shell 幾分鐘)就會不可避免地再次困擾我。
這是一段時間後我的提示符號的範例,剛從我之前的命令返回到 shell:
[10:59:14] user:Build git:(master*) $ schroot -c full32 -- antls -l
請注意,提示符顯然應該以 $ 結尾,接下來是ant
我在之前使用 Ctrl-Q 刪除該行之前錯誤輸入的一些垃圾。
對於上下文,我正在使用哦我的zsh與傑夫加賽德主題和快速插入。對於 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-line
通過啟動CTRL-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