История команд в зш

31

В настоящее время я настроил zsh таким образом, чтобы история команд сразу распределялась между всеми сессиями.

Скажем, у меня открыт эмулятор терминала с двумя вкладками, каждая с сеансом Zsh, А1 и А2. Если я введу ls -la в A1, а затем перейду к A2 и нажму клавишу со стрелкой вверх, я увижу ls -la в командной строке.

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

Изобразительное искусство
источник
Я делаю это регулярно. Однако есть много вопросов, на которые до сих пор нет удовлетворительного ответа.
Art
Отличный вопрос и полезные ответы. Я думал, что это была вещь iTerm2 конкретно. Надеюсь, что этот комментарий будет кому-то таким, если они сделают то же самое предположение.
Алан Х.

Ответы:

39

Вы, вероятно, получили INC_APPEND_HISTORYнабор.

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

Этот параметр работает как APPEND_HISTORY, за исключением того, что новые строки истории добавляются в $ HISTFILE постепенно (как только они вводятся), а не ожидают, пока оболочка не выйдет.

Опция, которую вы хотите APPEND_HISTORY:

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

simont
источник
echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu
Как можно настроить iTerm2 для восстановления отдельной истории вкладок после перезапуска (для zsh и oh-my-zsh)?
Гугол
8

Чтобы добавить к принятому ответу, если вы используете oh-my-zsh, у вас, вероятно, SHARE_HISTORYвключена опция по умолчанию.

Чтобы добиться разделения между запущенными оболочками + всей историей, объединенной во вновь открытом терминале, вы должны прокомментировать или удалить следующую строку:

setopt share_history # share command history data

от ~/.oh-my-zsh/lib/history.zsh

siergiej
источник
В моем случае путь файла 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, который исправил это для меня - ты должен сделать это отдельным ответом, это самый простой способ исправить это
jcollum