если я использую стрелку вверх в сеансе zsh, как и следовало ожидать, я получу предыдущие команды, от самых новых до самых старых. Теперь (будь то zsh или oh-my-zsh, я не знаю), но если я наберу начало строки и нажму стрелку вверх, я получу строки из моей истории, которые начинаются с того, что я напечатал. Пока все хорошо.

Проблема возникает, если я набираю многострочную команду, например:

for i in foo bar
echo $i

затем, если я позже нажму стрелку вверх, как только он попадет в многострочную команду, он будет отображать только результаты, начиная с for . Так что, если моя история похожа на:

touch foo
rm foo
for i in foo bar
echo $i
ls

и я ударил стрелок вверх , я получаю команду ls , то мульти-линии for команды, и с тех пор я вижу только только for команд , которые находятся в моей истории, а не команды rm или touch

Есть ли какой-нибудь способ иметь возможность поиска в хронологическом порядке, не застревая, когда история попадает в многострочную команду?

1 ответ1

1

Описанное поведение связано с использованием up-line-or-search , который будет перемещаться вверх по строке команды и в первой строке команды будет искать в истории строки, начинающиеся с первого слова.

Объяснение вашей проблемы: начиная с пустой строки, любая строка в истории будет совпадать. Пока найдены только однострочные команды, нет разницы в поведении по up-history up-line-or-history . Но при достижении многострочной команды он больше не ищет, а проходит по строкам. Когда достигнута верхняя строка, начинается новый поиск, но теперь он ищет первое слово в этой строке вместо того, чтобы продолжить старый поиск любой строки.

По умолчанию Up отображается на up-line-or-history , которая проходит назад через записи истории и в случае многострочных команд через каждую строку. up-history также будет проходить через историю, но обрабатывать многострочные команды так же, как однострочные. Оба обеспечат ожидаемое поведение.

Я бы посоветовал поискать в вашей конфигурации zsh и Oh-my-ZSH, где привязан up-line-or-search и заменить его на up-line-or-history или удалить привязку, поскольку up-line-or-history по умолчанию в любом случае.

Кроме того, в зависимости от используемого терминала, последовательность клавиш для Up может быть ^[OA или ^[[A Чтобы получить согласованное поведение от вашей оболочки, обе команды должны быть настроены на одни и те же команды.

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