історія не збереглася в zsh


17

Щоразу, коли я відкриваю новий примірник терміналу, історія порожня. Чому так? Чи потрібно мені щось налаштувати? Однак у баші немає необхідності в цьому.


Не впевнений у цьому zsh, але за замовчуванням bashзаписує у свої файли історії після виходу , а це означає, що якщо ви раніше не використовували його та не відкривали деякі оболонки, вони показуватимуть історію, поки щонайменше один не вийде, тим самим записуючи її файл історії.
DopeGhoti

Відповіді:


25

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, до речі, входять .


9

Хоча існуюча відповідь правильна, я подумав, що варто додати, що можливо кращий варіант, ніж 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 або видаліть його, щоб отримати новий кадр у майстра.


0

Якщо це не працює, і у вас все це вже на місці, спробуйте:

fc -W

Це записує поточну історію у файл історії. І якщо ви отримаєте:

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

тоді настав час перевірити дозволи на файл та батьківський каталог.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.