Недавно я установил Ubuntu 12.04 64 бит. Я используюtmuxсо многими открытыми окнами, все они используютзшкак оболочка, некоторые из них черезchrootсреда, использующая ту же домашнюю папку, что и обычная среда.
После некоторого времени выполнения случайных команд в оболочках (всех видов, но в основном файловых операций, vi, команд build/make в среде chroot и без нее) каждая оболочка немедленно начинает показывать некоторые предварительно скомпилированные команды из прошлой истории, которые мне нужно удалить, например, с помощью 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-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