Щоразу, коли я відкриваю новий примірник терміналу, історія порожня. Чому так? Чи потрібно мені щось налаштувати? Однак у баші немає необхідності в цьому.
Щоразу, коли я відкриваю новий примірник терміналу, історія порожня. Чому так? Чи потрібно мені щось налаштувати? Однак у баші немає необхідності в цьому.
Відповіді:
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
записує у свої файли історії після виходу , а це означає, що якщо ви раніше не використовували його та не відкривали деякі оболонки, вони показуватимуть історію, поки щонайменше один не вийде, тим самим записуючи її файл історії.