Jak udostępniasz historię między terminalami w Zsh?

29

Jak można to zrobić, aby każde wprowadzone polecenie było widoczne w historii każdego otwartego terminalu?

Gdy otwartych jest wiele terminali, historia nie jest współdzielona, ​​tzn. To, co wpisałeś w historii jednego terminala, nie pojawia się w innym. Pomyśl o alternatywie dla Basha PROMPT_COMMAND="history -a"(która zapisuje historię przed wyświetleniem monitu).

MJB
źródło
Zobacz także powiązane i zaawansowane pytania i odpowiedzi: superuser.com/questions/446594/…
lumbric

Odpowiedzi:

36

Miałyby zastosowanie następujące opcje:

  • Aby zapisać każde polecenie przed jego wykonaniem (różni się to od historii bash - rozwiązanie):

    setopt inc_append_history
    
  • Aby odczytać plik historii za każdym razem przywoływana jest historia, a także funkcjonalność inc_append_history:

    setopt share_history
    

Można je ustawić w .zshrcpliku.

Powiązane z bash:

MJB
źródło
4
„SHARE_HISTORY: Ta opcja zarówno importuje nowe polecenia z pliku historii, jak i powoduje, że wpisane polecenia są dołączane do pliku historii (to drugie jest jak określenie INC_APPEND_HISTORY, które należy wyłączyć, jeśli ta opcja jest aktywna ).” ( Dodane ręczne podkreślenie) tj. Tylko opcja INC_APPEND_HISTORY zrobi to, co chcesz.
artfulrobot
3
W rzeczywistości sama opcja SHARE_HISTORY zrobi to, co chcesz. Wyrażenie „które należy wyłączyć, jeśli ta opcja jest aktywna”, przekłada się na „[INC_APPEND_HISTORY] należy wyłączyć, jeśli włączona jest opcja [SHARE_HISTORY]”. Przetestowałem to na Zsh 5.1.1 na Ubuntu Xenial.
Linus Arver
1
@opert jest poprawny: setopt share_historyjest tym, co osiągnie pożądany rezultat. @MJB czy zechciałbyś edytować swoją odpowiedź, aby usunąć wzmiankę o setopt inc_append_history? Ukrywa rzeczywistą odpowiedź.
bonh
W nazwach nie jest rozróżniana wielkość liter, a podkreślenia są ignorowane, więc jeślisetopt | grep histdostanieszincappendhistoryisharehistory.
Pablo A,
4

Jeśli użyjesz niesamowitego OhMyZSH Robby'ego Russella, zajmie się tym i jeszcze więcej.

Zobacz https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/history.zsh

To obejmuje setopt inc_append_history.

james_womack
źródło
To jego / jej / jego. Ważne przy pracy z powłoką.
Cees Timmerman,
@CeesTimmerman naprawiono, dziękuję. Uważam, że jest to ważne dla komunikacji. Co miałeś na myśli przez „Ważne dla pracy powłoki”?
james_womack
1
Literówka w powłoce może uszkodzić cały system.
Cees Timmerman