zsh: ustaw TERM = screen-256color w tmux, ale xterm-256color bez tmux


18

Potrzebuję $TERMbyć xterm-256colorpoza tmux (w „zwykłym” terminalu z zsh), ale screen-256colorwewnątrz tmux.

Najpierw próbowałem:

  • dodaj export TERM='xterm-256color'do mojego ~/.zshrc.
  • dodaj set -g default-terminal "screen-256color"do mojego~/.tmux.conf

Teraz, kiedy otwieram terminal (powiedzmy xterm), TERMjest xterm-256color, co jest poprawne. Ale kiedy uruchomię Tmux, TERMznowu jest xterm-256color!

Potem próbowałem skomentować linię w moim ~/.zshrc. Teraz, kiedy otwieram terminal, TERMjest xtermi kiedy uruchamiam tmux, TERMjest screen-256color. Wydaje się więc, jeśli ustawić TERMw .zshrc, tmux pierwsze zestawy TERMdo screen-256color, biegnie shell (który jest zsh) i zsh czyta .zshrci resetuje TERMsię xterm-256color.

Jak zrobić, TERMaby być xterm-256colorw „zwykłym” terminalu i screen-256colorw tmuxie?


5
Ustaw TERM dla xterm w konfiguracji xterm (zasoby X) oraz dla Tmux w konfiguracji tmux. Nie ma żadnego powodu, aby robić to w Zsh.
Stéphane Chazelas,

Hmm, ale używam także innych emulatorów terminali: powiedzmy, że konsola rozwijana w stylu gnome-terminal i quake „altyo” github.com/linvinus/AltYo , wciąż nie mogę znaleźć sposobu na poprawne ustawienie TERMtych terminali
Dmitry Frank

1
Te aplikacje są odpowiedzialne za prawidłowe ustawienie swojego TERM. Bo gnome-terminalto prawdopodobnie powinno być gnome-256color... Więc to te aplikacje, które musisz poprawnie skonfigurować, a nie zsh. Powodem, dla którego używają, xtermjest prawdopodobnie uniknięcie problemów podczas sshowania na komputerach, które nie mają bardziej szczegółowych wpisów terminfo. Jeśli wiesz, że korzystasz tylko z ssh do maszyn z wyczerpującą bazą danych terminfo, możesz i powinieneś to zmienić w samych aplikacjach.
Stéphane Chazelas

A jeśli chcesz dodać .zshrc kludge, IMO, powinno to być na komputerach, które mają niekompletne bazy danych terminfo (aby zastąpić xterm-256color, xtermjeśli xterm-256color s nie jest obsługiwane, chociaż byłoby jeszcze lepiej dodać te wpisy w naszym własna baza danych ~ / .terminfo).
Stéphane Chazelas

Powinniśmy ustawić termin w emulatorze terminali, a nie w .zshrc. To nie jest właściwy sposób.
jdhao

Odpowiedzi:


24

Zmienna środowiskowa TERM powinna być ustawiona przez aplikację, która działa jako twój terminal. O to właśnie chodzi: powiadomienie działających w nich programów o tym, który terminal jest używany, a co za tym idzie, jakie funkcje obsługuje.

Zsh nie jest terminalem. To jest skorupa. Może mieć znaczenie ustawienie TERM, jeśli chce robić specjalne rzeczy, ale nie powinno być odpowiedzialne za jego ustawienie . Zamiast tego jest odpowiedzialny za ustawianie zmiennych, takich jak ZSH_VERSION, które mogą być używane przez skrypty lub inne procesy potomne, aby zrozumieć, jakiego zachowania można oczekiwać od ich powłoki nadrzędnej.

Zamiast tego należy sprawdzić konfigurację dowolnej używanej aplikacji terminalowej i poprosić ją o prawidłowe zgłoszenie się. Na przykład możesz to zrobić dla xterm, dodając ten wiersz do ~/.Xdefaultspliku używanego do wartości konfiguracyjnych:

xterm*termName: xterm-256color

Wygląda na to, że gnome-terminal robi idiotyzm, czytając, jaka byłaby twoja konfiguracja xterm, zamiast mieć własną. W niektórych przypadkach może Cię to ominąć, ale lepiej ustawić gnome-256color. Wydaje się, że jest to długotrwały problem (i niektóre inne emulatory terminali oparte na VTE). Powszechnym sposobem włamywanie wokół to wykorzystać inną wartość to nie ustawiony:

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=gnome-256color
fi 

Ale to przywraca problem z tmuxem, więc musiałbyś to wyjaśnić, nie resetując TERM, jeśli jest już coś takiego jak „screen-256color” lub „screen”:

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=gnome-256color
fi

W przypadku innych terminali konieczne będzie sprawdzenie ich prawidłowych procedur konfiguracji.


zshnie ponosi odpowiedzialności za ustawienie $SHELL. loginjest odpowiedzialny za ustawienie go i jesteś odpowiedzialny za zmianę tego na coś innego, jeśli chcesz powiedzieć aplikacjom ( xterm, vi...), którą powłokę chcesz wybrać jako preferowaną. zshodpowiada za ustawienie $ZSH_VERSIONi kilka udokumentowanych specjalnych zmiennych powłoki, ale nie dotyka $SHELL.
Stéphane Chazelas

@ StéphaneChazelas To było dla mnie niechlujne, dzięki za korektę.
Caleb

Dzięki za to sprawiło, że konsoleszukałem sposobu ustawiania TERM zamiast umieszczania go w moim bashrc. Okazało się, że ustawione w profilu na zakładce Ogólne, środowiska, zmienił go od xtermdoxterm-256color
Mike Lippert

Warto zauważyć, że pod moim waniliowym deb10 zainstaluj raporty GNOME Terminal truecolorzamiast gnome-terminalfor, $COLORTERMwięc powyższy mechanizm wykrywania może nie działać. Wygląda na to, że XTERM wcale nie ustawia tej wartości, sprawdzenie poprawności może być prawidłowe. ten typ terminu jest częściowo omawiany w tej liście,
Shaun Wilson

8

Umieść w swoim .zshrc

[[ $TMUX = "" ]] && export TERM="xterm-256color"

I wewnątrz twojego .tmux.conf

set -g default-terminal "screen-256color"

2
Lub W [[ $TMUX != "" ]] && export TERM="screen-256color" ten sposób zsh ustawi TERM tylko, jeśli zostanie wywołany w sesji
tmux
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.