Historia poleceń w Zsh

32

Obecnie skonfigurowałem zsh w taki sposób, aby historia poleceń była natychmiast dzielona między wszystkie sesje.

Powiedzmy, że mam otwarty emulator terminala z dwiema zakładkami, każda z sesją zsh, A1 i A2. Jeśli wprowadzę ls -la w A1, a następnie przejdę do A2 i naciśnie klawisz strzałki w górę, zobaczę ls -la w wierszu polecenia.

Chciałbym to zmienić, aby sesje nie dzieliły się historią poleceń, chociaż po rozpoczęciu nowej sesji pobiera ona całą poprzednią historię ze wszystkich sesji przed nią.

Sztuka
źródło
Robię to regularnie. Istnieje jednak wiele pytań, na które wciąż nie ma zadowalającej odpowiedzi.
Art.
Świetne pytanie i pomocne odpowiedzi. Myślałem, że to konkretnie iTerm2. Mam nadzieję, że ten komentarz stanie się kimś takim, jeśli przyjmie to samo założenie.
Alan H.,

Odpowiedzi:

40

Prawdopodobnie masz już INC_APPEND_HISTORYustawione.

INC_APPEND_HISTORYOpcja, ze man zshoptions:

Ta opcja działa jak APPEND_HISTORY, z tą różnicą, że nowe wiersze historii są dodawane do $ HISTFILE przyrostowo (natychmiast po ich wprowadzeniu), zamiast czekać na wyjście z powłoki.

Wymagana opcja to APPEND_HISTORY:

APPEND_HISTORY Jeśli ta opcja jest ustawiona, sesje zsh dołączą swoją listę historii do pliku historii, zamiast ją zamieniać. Zatem dla wielu równoległych sesji zsh wszystkie nowe wpisy z ich list historii zostaną dodane do pliku historii, w kolejności ich wyjścia. Plik będzie nadal okresowo ponownie zapisywany w celu przycięcia, gdy liczba wierszy wzrośnie o 20% powyżej wartości określonej przez $ SAVEHIST (patrz także opcja HIST SAVE BY COPY).

Możesz przeczytać o tych opcji w man zshoptions, man zshalllub online tutaj .

Aby je ustawić, w swoim ~/.zshrclub podobnym, powinieneś mieć:

setopt APPEND_HISTORY

Pamiętaj, że jeśli używasz oh-my-zsh domyślnie, to INC_APPEND_HISTORYjest używane. Nie jestem w 100% pewien, w jaki sposób wszystko się ładuje, ale jeśli ta oh-my-zshopcja zastąpi tę, którą ustawiłeś ~/.zshrc, możesz się nią bawić~/.oh-my-zsh/lib/history.zsh

simont
źródło
echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu
W jaki sposób można skonfigurować iTerm2, aby przywracał indywidualną historię kart po ponownym uruchomieniu (dla zsh i oh-my-zsh)?
Googol
10

Aby dodać do zaakceptowanej odpowiedzi, jeśli używasz oh-my-zsh, prawdopodobnie masz SHARE_HISTORYdomyślnie włączoną opcję.

Aby osiągnąć separację między uruchomionymi powłokami + całą historią w nowo otwartym terminalu, musisz skomentować lub usunąć następujący wiersz:

setopt share_history # share command history data

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

siergiej
źródło
W moim przypadku ścieżka do pliku history.zsh to~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya
3
Innym sposobem, aby go o to, aby umieścić unsetopt share_historyw swojej .zshrcPo oh-my-zshzaładowaniu. Udokumentowane tutaj .
przeciwdziałanie
dzięki @counterbeing, że to dla mnie naprawiło - powinieneś zrobić osobną odpowiedź, jest to najprostszy sposób, aby to naprawić
jcollum