Potrzebuję $TERM
być xterm-256color
poza tmux (w „zwykłym” terminalu z zsh), ale screen-256color
wewną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), TERM
jest xterm-256color
, co jest poprawne. Ale kiedy uruchomię Tmux, TERM
znowu jest xterm-256color
!
Potem próbowałem skomentować linię w moim ~/.zshrc
. Teraz, kiedy otwieram terminal, TERM
jest xterm
i kiedy uruchamiam tmux, TERM
jest screen-256color
. Wydaje się więc, jeśli ustawić TERM
w .zshrc
, tmux pierwsze zestawy TERM
do screen-256color
, biegnie shell (który jest zsh) i zsh czyta .zshrc
i resetuje TERM
się xterm-256color
.
Jak zrobić, TERM
aby być xterm-256color
w „zwykłym” terminalu i screen-256color
w tmuxie?
TERM
tych terminalignome-terminal
to prawdopodobnie powinno byćgnome-256color
... Więc to te aplikacje, które musisz poprawnie skonfigurować, a niezsh
. Powodem, dla którego używają,xterm
jest 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.xterm
jeśli xterm-256color s nie jest obsługiwane, chociaż byłoby jeszcze lepiej dodać te wpisy w naszym własna baza danych ~ / .terminfo)..zshrc
. To nie jest właściwy sposób.Odpowiedzi:
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
~/.Xdefaults
pliku używanego do wartości konfiguracyjnych: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:
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”:
W przypadku innych terminali konieczne będzie sprawdzenie ich prawidłowych procedur konfiguracji.
źródło
zsh
nie ponosi odpowiedzialności za ustawienie$SHELL
.login
jest 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ą.zsh
odpowiada za ustawienie$ZSH_VERSION
i kilka udokumentowanych specjalnych zmiennych powłoki, ale nie dotyka$SHELL
.konsole
szukał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 odxterm
doxterm-256color
truecolor
zamiastgnome-terminal
for,$COLORTERM
wię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,Umieść w swoim .zshrc
I wewnątrz twojego .tmux.conf
źródło
[[ $TMUX != "" ]] && export TERM="screen-256color"
ten sposób zsh ustawi TERM tylko, jeśli zostanie wywołany w sesji