Как запретить ZSH объединять историю для всех закрывающихся вкладок?
Я использую комбинацию zsh
с oh-my-zsh
и iTerm2 для разработки на Mac. Я разочарован следующей проблемой:
- N вкладок открыто
- закрыть терминал
- открыть его снова (с помощью параметра " Восстановить настройки окна системы")
- история из всех ранее открытых вкладок была объединена в одну для каждой вновь открытой вкладки
Вопрос: как сохранить отдельную историю для каждой вновь открытой вкладки?
2 ответа
По https://github.com/robbyrussell/oh-my-zsh/issues/2537,
добавлять unsetopt share_history
на ваш .zhsrc
файл.
Если iTerm2 на самом деле просто не скрывает вкладку о закрытии и не поддерживает сессию оболочки в фоновом режиме (что, по мнению веб-сайта iTerm2, представляется возможным), невозможно полностью восстановить сессию оболочки. В вашем случае создается впечатление, что при восстановлении вкладки создается новый сеанс оболочки, что приводит к тому, что история читается HISTFILE
,
Если вы хотите предотвратить любое слияние истории, вы должны убедиться, что из опций APPEND_HISTORY
, INC_APPEND_HISTORY
а также SHARE_HISTORY
устанавливается только первый:
setopt noincappendhistory
setopt nosharehistory
setopt appendhistory
Это приведет к тому, что новые записи в истории (т. Е. Команды, запущенные во время сеанса) будут добавляться в файл истории только при выходе из оболочки. Поэтому, когда вы закрываете сеанс, следующая открытая (повторно) оболочка будет иметь строки только что закрытой оболочки в нижней части истории.
Другим вариантом может быть наличие отдельных файлов истории для каждого сеанса оболочки и использование собственного метода загрузки истории из этих файлов с помощью fc
встроенный. Это будет, по крайней мере, частично зависеть от того, возможно ли провести различие между вкладками iTerm2 в рамках сеанса оболочки (например, с помощью некоторой переменной среды) и сохраняется ли это при повторном открытии вкладки.