Когда оболочка 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
ВВОДА ранее, или вы также создадите подобный виджет для этих целей.