1

Я недавно установил Ubuntu 12.04 64-битную машину. Я использую tmux со многими открытыми окнами, все они используют zsh в качестве оболочки, некоторые из них через среду 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 в предыдущем случае.

Для контекста, я использую ой-мой-ЗШ с темой geoffgarside и gitfast плагин. Для chroot я использую schroot со следующей конфигурацией:

[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 ответ1

0

Я полагаю, вы используете раскладку 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .