2

У меня уже есть эта проблема в течение некоторого времени, и это действительно раздражает, но я не могу понять, что не так. Когда я запускаю сеанс tmux на своем терминале, независимо от того, находится ли он на Terminal.app или iTerm2, я всегда получаю странный пробел между приглашением и вводимым текстом, примерно в 3 раза больше, чем за пределами tmux. Само по себе это не будет большой проблемой, но когда я пытаюсь нажать клавишу Backspace, чтобы удалить что-то, или использую режим vi (zsh), чтобы изменить что-либо, курсор отображается так, как если бы текст находился в правильном положении (так, как он отображается снаружи). tmux) но текст не в том месте, поэтому невозможно понять, что я на самом деле изменяю. Кроме того, когда я нажимаю клавишу ввода, я вижу, что текст мигает в правильном положении, но это не очень полезно в этот момент.

Я пытался сообщить типу $ TERM с разными параметрами при запуске tmux, но ни один из них, кажется, не улучшил его.

Кто-нибудь знает, в чем может быть проблема?

РЕДАКТИРОВАТЬ: Это мой $ PROMPT/$ PS1:% {$ fg_bold [красный]%} ➜% {$ fg_bold [зеленый]%}% p% {$ fg [голубой]%}% c% {$ fg_bold [синий] %} $(git_prompt_info)% {$ fg_bold [blue]%}%% {$ reset_color%}

2 ответа2

3

Я видел такую проблему при использовании многобайтовых символов (в кодировке UTF-8) в приглашении, но только когда опция окна utf8 tmux отключена.

Чтобы идентифицировать такие символы, ищите любые «причудливые» формы, специальные символы или акцентированные символы, которые находятся за пределами репертуара ASCII (т.е. любую кодовую точку Unicode за пределами U+007F).

Чтобы проверить, активна ли опция utf8 используйте эту команду в окне, в котором возникла проблема:

tmux show-option -gw utf8 \; show-option -w utf8

(или в приглашении tmux : без tmux и без обратной косой черты)

Если он показывает два значения, то второе является активным значением для этого окна. Первое (или единственное) значение - это глобальное значение, которое будет использоваться, если не установлено локальное значение окна.

Если вы видите другое значение от одного установленного файла конфигурации, то вам , возможно , потребуется перезагрузить сервер (или экви изменения , внесенные в файл конфигурации идемпотентны, то вы можете сделать его source tmux source ~/.tmux.conf).


Проблема возникает из-за того, что (без использования utf8 ) tmux и ваш эмулятор внешнего терминала по-разному представляют, сколько столбцов используется для отображения каждого многобайтового символа. tmux ожидает, что многобайтовый символ займет несколько столбцов (по одному на каждый байт), но ваш внешний эмулятор, вероятно, настроен на распознавание его как одного символа UTF-8 и, следовательно, будет отображать его в одном столбце.

Эта проблема особенно заметна в приглашении zsh, потому что zsh внимательно следит за тем, где находится курсор, чтобы знать, когда строка прервется и что нужно сделать, чтобы правильно перерисовать приглашение. К сожалению, несоответствие между (не- utf8) tmux и (эмулятором UTF-8) заставляет tmux сообщать позицию курсора, которая находится на несколько столбцов справа от ожидаемой позиции (один дополнительный пробел на каждый дополнительный байт в каждом многобайтовом символ в подсказке).

Включение utf8 в tmux устраняет проблему, поскольку и tmux, и внешний эмулятор распознают последовательности для каждой многобайтовой кодовой точки UTF-8 как занимающие один столбец. Переконфигурирование вашего внешнего эмулятора для использования однобайтовой кодировки также исправит несоответствие, но за счет невозможности правильно просмотреть данные в кодировке UTF-8 (хотя такое представление в действительности показывает вам, что «думает» tmux, когда utf8 выключен).

0

У меня была точно такая же ошибка в Terminal.app. Что для меня исправило, так это перейти в «настройки / настройки / расширенные» и изменить "Объявить терминал как" на xterm-256color. Понятия не имею почему :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .