Всякий раз, когда я открываю новый экземпляр терминала, история пуста. Это почему? Нужно ли что-то настраивать? В bash это не нужно.
Всякий раз, когда я открываю новый экземпляр терминала, история пуста. Это почему? Нужно ли что-то настраивать? В bash это не нужно.
Ответы:
Bash и Zsh имеют разные значения по умолчанию. Zsh не сохраняет историю в файл по умолчанию.
Когда вы запускаете zsh без файла конфигурации, он отображает интерфейс конфигурации. В этом интерфейсе конфигурации выберите
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
затем просмотрите предложенные настройки и выберите
# (0) Remember edits and return to main menu (does not save file yet)
Повторите эти действия для других подменю для (2) завершения, (3) сочетаний клавиш и (4) параметров, затем выберите
(0) Exit, saving the new settings. They will take effect immediately.
из главного меню.
Рекомендуемые настройки, связанные с историей:
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory
Я бы использовал другое имя для файла истории, чтобы указать, что это файл истории zsh. И 1000 линий могут быть увеличены на современной системе.
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory
Эти строки идут ~/.zshrc
, кстати.
Хотя существующий ответ правильный, я подумал, что, возможно, стоит добавить, что, возможно, есть лучший вариант, чем appendhistory
сохранение истории, и это так SHARE_HISTORY
.
Из документов SHARE_HISTORY
"оба импортируют новые команды из файла истории, а также заставляют ваши введенные команды добавляться в файл истории". Это означает, что оболочки знают историю друг друга без необходимости закрывать текущую или открывать новую.
Итак, все вместе вы установили бы это так:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
INC_APPEND_HISTORY_TIME
, который записывает в историю со всех терминалов, как указано выше, но эта история "не будет доступна немедленно из других экземпляров оболочки, которые используют тот же файл истории". Это имеет больше смысла для меня, потому что тогда я могу независимо просматривать историю каждого терминала, но он все еще записывается в журнал.
INC_APPEND_HISTORY_TIME
может иметь более логичный смысл. Я, наверное, не должен был говорить «лучше», я думаю, это просто вопрос личных предпочтений на данный момент!
когда вы впервые переключаетесь с bash на zsh, ваша история bash не будет перенесена. Таким образом, вся история, которую вы имели в bash, все еще находится в файле истории bash. Zsh начинает записывать историю с того момента, как вы начали использовать ее в качестве оболочки.
Если вы не настроили его для захвата истории, вы можете перезапустить мастер настройки и сообщить zsh, сколько истории сохранить. Либо измените имя ~ / .zshrc, либо удалите его, чтобы получить новый выстрел в мастере.
Если это не работает, и у вас все это уже есть, попробуйте:
fc -W
Это записывает текущую историю в файл истории. И если вы получите:
zsh: locking failed for /home/username/.zsh_history: permission denied
тогда пришло время проверить права доступа к файлу и родительскому каталогу.
zsh
, но по умолчаниюbash
записывает в его файлы истории при выходе , что означает, что если вы не использовали его раньше и не открывали некоторые оболочки, все они теперь будут отображать историю, пока хотя бы один из них не выйдет из системы, записав свой файл истории.