история не сохранилась в зш

16

Всякий раз, когда я открываю новый экземпляр терминала, история пуста. Это почему? Нужно ли что-то настраивать? В bash это не нужно.

Жиль "ТАК - перестань быть злым"
источник
Не уверен zsh, но по умолчанию bashзаписывает в его файлы истории при выходе , что означает, что если вы не использовали его раньше и не открывали некоторые оболочки, все они теперь будут отображать историю, пока хотя бы один из них не выйдет из системы, записав свой файл истории.
DopeGhoti

Ответы:

24

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, кстати.

Жиль "ТАК - перестань быть злым"
источник
8

Хотя существующий ответ правильный, я подумал, что, возможно, стоит добавить, что, возможно, есть лучший вариант, чем appendhistoryсохранение истории, и это так SHARE_HISTORY.

Из документов SHARE_HISTORY"оба импортируют новые команды из файла истории, а также заставляют ваши введенные команды добавляться в файл истории". Это означает, что оболочки знают историю друг друга без необходимости закрывать текущую или открывать новую.

Итак, все вместе вы установили бы это так:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
Берт
источник
1
+1 и добро пожаловать в U / L, но лично я предпочитаю INC_APPEND_HISTORY_TIME, который записывает в историю со всех терминалов, как указано выше, но эта история "не будет доступна немедленно из других экземпляров оболочки, которые используют тот же файл истории". Это имеет больше смысла для меня, потому что тогда я могу независимо просматривать историю каждого терминала, но он все еще записывается в журнал.
Sparhawk
2
Благодарность! Да, это достаточно справедливо, и я полностью понимаю, почему INC_APPEND_HISTORY_TIMEможет иметь более логичный смысл. Я, наверное, не должен был говорить «лучше», я думаю, это просто вопрос личных предпочтений на данный момент!
Берт
0

когда вы впервые переключаетесь с bash на zsh, ваша история bash не будет перенесена. Таким образом, вся история, которую вы имели в bash, все еще находится в файле истории bash. Zsh начинает записывать историю с того момента, как вы начали использовать ее в качестве оболочки.

Если вы не настроили его для захвата истории, вы можете перезапустить мастер настройки и сообщить zsh, сколько истории сохранить. Либо измените имя ~ / .zshrc, либо удалите его, чтобы получить новый выстрел в мастере.

LocoCoyote
источник
0

Если это не работает, и у вас все это уже есть, попробуйте:

fc -W

Это записывает текущую историю в файл истории. И если вы получите:

zsh: locking failed for /home/username/.zsh_history: permission denied

тогда пришло время проверить права доступа к файлу и родительскому каталогу.

Крис Снайдер
источник