Історія команд в zsh


32

В даний час у мене налаштовано zsh таким чином, що історія команд поділяється між усіма сесіями негайно.

Скажімо, у мене відкритий емулятор терміналу з двома вкладками, на кожній з яких є сеанс zsh, A1 та A2. Якщо я введіть ls -la в A1, а потім перейдіть до A2 і натисніть клавішу зі стрілкою вгору, я побачу ls -la в командному рядку.

Я хотів би змінити його, щоб сеанси не ділилися історією команд між собою, хоча при запуску нового сеансу він отримує всю попередню історію з усіх сеансів до неї.


Я роблю це регулярно. Однак є багато питань, на які досі немає задовільної відповіді.
Мистецтво

Відмінне запитання та корисні відповіді. Я подумав, що це спеціально iTerm2. Сподіваємось, цей коментар буде комусь таким чином, якщо вони висловлять те саме припущення.
Алан Х.

Відповіді:


40

Ви, мабуть, INC_APPEND_HISTORYналаштувались.

INC_APPEND_HISTORYВаріант, з man zshoptions:

Цей параметр працює як APPEND_HISTORY, за винятком того, що нові рядки історії додаються до $ HISTFILE поступово (як тільки вони введені), а не чекають, поки оболонка вийде.

Ви бажаєте APPEND_HISTORY:

ДОДАТОК_ХІСТОРІЯ Якщо це встановлено, сесії zsh додадуть свій список історії до файлу історії, а не замінять його. Таким чином, для декількох паралельних сеансів zsh всі записи зі списків історії будуть додані до файлу історії в порядку, з якого вони виходять. Файл все ще буде періодично переписуватися для обрізання, коли кількість рядків зросте на 20% понад значення, визначене $ SAVEHIST (див. Також варіант HIST SAVE BY COPY).

Ви можете прочитати про ці параметри в man zshoptions, man zshallабо на сайті тут .

Щоб встановити їх у своєму ~/.zshrcчи подібному, ви повинні мати:

setopt APPEND_HISTORY

Майте на увазі, що, якщо ви використовуєте oh-my-zsh за замовчуванням, я вважаю, що INC_APPEND_HISTORYце використовується. Я не на 100% впевнений, в який спосіб завантажуються речі, але якщо oh-my-zshопція перекриє ту, яку ви встановили ~/.zshrc, ви можете поспілкуватися з цим~/.oh-my-zsh/lib/history.zsh


echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu

Як iTerm2 можна налаштувати для відновлення індивідуальної історії вкладок після перезавантаження (для zsh та oh-my-zsh)?
Гугол

10

Щоб додати до прийнятої відповіді, якщо ви використовуєте oh-my-zsh, ймовірно, SHARE_HISTORYза умовчанням у вас включена опція.

Щоб домогтися поділу між запущеними оболонками + усією історією, об'єднаною в нововідкритий термінал, вам слід прокоментувати або видалити наступний рядок:

setopt share_history # share command history data

з ~/.oh-my-zsh/lib/history.zsh


У моєму випадку шлях до файлу history.zsh~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya

3
Ще один спосіб вирішити це - це помістити unsetopt share_historyваш файл .zshrcпісля oh-my-zshзавантаження. Задокументовано тут .
counterbeing

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