Я видел такую проблему при использовании многобайтовых символов (в кодировке 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
выключен).