Я настроил свой tmux, screen-256colors
и он отлично работает с vim.
Однако когда я подключаюсь по ssh к удаленному хосту из tmux, screen-256colors
он не распознается, поэтому я получаю такие ошибки:
E558: Terminal entry not found in terminfo 'screen-256color' not known. Available builtin terminals are:
builtin_ansi
builtin_xterm
builtin_iris-ansi
builtin_dumb defaulting to 'ansi'
Помимо редактирования каждого пульта .bashrc
(аналогичноэто предложение), есть ли способ правильно и автоматически настроить TERM
на удаленном хосте?
решение1
В большинстве случаев вам необходимо установить необходимоетерминфоописания на удаленном хосте. Terminfo — это то, что программы Linux используют для определения того, как работать с определенным терминалом (какие управляющие коды отправлять).
Например, в Debian или Ubuntu вам обычно нужен пакет ncurses-base
(который собирает данные terminfo для всех «установленных» эмуляторов терминала).
Если это не удастся, вы можете вручную скопировать данные terminfo для определенных терминалов:
На локальной системе выведите описание в текстовый формат:
infocmp xterm-256color > xterm-256color.ti infocmp screen-256color > screen-256color.ti
Скопируйте файлы на удаленный хост и скомпилируйте их снова:
tic xterm-256color.ti tic screen-256color.ti
В Linux описания будут храниться в ~/.terminfo
. (Обратите внимание, что с момента последних обновлений 2023 года это место будетнет(Он больше не может быть прочитан программами «setuid», хотя они, как правило, редки.)
infocmp
и tic
являются частьюncursesилиncurses-binпакеты в большинстве дистрибутивов Linux, а также в большинстве BSD, которые используютncurses(хотя в BSD может не быть базы данных для каждого пользователя).
решение2
У меня в .bashrc есть следующее:
alias ssh='TERM=screen ssh'