4

Я установил setopt share_history и set opt inc_append_history в моем ~/.zshrc . Это почти работает.

В сеансе 1 я выполняю команду, она записывается в историю.

В сеансе 2 команда не отображается, когда я нажимаю стрелку ВВЕРХ , пока не выполню history . Как только я выполняю history она появляется.

Как я могу заставить историю отображаться сразу после нажатия стрелки ВВЕРХ ?

1 ответ1

3

Когда оболочка Z отображает приглашение, оно бездействует, и IMHO не выполняет никаких фоновых задач. Таким образом, файл истории $HISTFILE перечитывается только при рендеринге нового приглашения. Поэтому достаточно, но также необходимо нажать ENTER на терминале, чтобы перечитать историю.

Если вы хотите сохранить это дополнительное нажатие клавиши, вы можете использовать следующий виджет zle в вашем ~/.zshrc:

up-line-or-history-reread() {
        [[ -z $BUFFER ]] && fc -R $HISTFILE
        zle up-line-or-history
}
zle -N up-line-or-history-reread
bindkey '^[[A' up-line-or-history-reread

Этот новый виджет, связанный с UP ARROW , проверяет, является ли текущая командная строка пустой и, если это так, перечитывает историю. После этого он вызывает виджет по умолчанию (up-line-or-history).

Этот подход имеет по крайней мере эти два недостатка по сравнению с поведением по умолчанию:

  • Если вы попали в историю нескольких команд и удалили всю командную строку, следующее нажатие на UP ARROW начинается снова в конце истории команд.
  • Если вы используете какой-либо другой механизм истории, например, поиск по истории, вам все равно нужно нажать ENTER ВВОДА ранее, или вы также создадите подобный виджет для этих целей.

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