Я столкнулся с необычной проблемой в конфигурации oh-my-zsh, когда курсор не синхронизируется с текстом. (Обычно я работаю с screen в konsole.

Например, в новой строке терминала, где в подсказке ничего не было введено, курсор просто смещается вперед через несколько секунд без всякой причины. Как будто начальная позиция для подсказки смещается вперед, как будто это сделал какой-то призрак.

Другая особенность заключается в том, что невозможно вернуться к первой позиции курсора, и символ в этой позиции не может быть перемещен назад.

Я вижу, что визуальное положение курсора и отображаемого текста не совпадает с его фактическим положением в физическом буфере редактируемого текста.

Например. скажем, я ввожу help в терминале, и после этого я использую клавишу со стрелкой вверх, чтобы получить предыдущую команду, которая должна быть help. Кажется, что-то происходит с результатом, что когда я возвращаюсь к help, я могу вернуться только до e, оставляя h все еще отображаемым, но физически все слово help в физическом буфере были бы очищены. Поэтому, если я хочу снова набрать help, на экране отобразится hhelp, но при нажатии клавиши ввода будет выполнена команда help. Это не будет hhelp.

Это происходит только в учетной записи root, хотя я уверен, что использую одинаковые настройки как для root, так и для конечных пользователей.

Конечным результатом является то, что если abcde отображается на экране и выполняется возврат на c, я, скорее всего, переместил b назад, оставив мне acde, а не abde.

Любые идеи?

ОБНОВИТЬ:

Это дополнительная информация, связанная с комментариями.

Моя подсказка %{%f%b%k%}$(build_prompt). Это одинаково как для обычных учетных записей, так и для учетной записи root. Но проблема возникает только в учетной записи root.

1
vfclists 27 Дек 2019 в 12:21
1
Это простой вариант unix.stackexchange.com/q/197185/5132.
 – 
JdeBP
27 Дек 2019 в 04:30
1
 – 
Thomas Dickey
27 Дек 2019 в 04:33
Моя подсказка %{%f%b%k%}$(build_prompt). Это одинаково как для обычных учетных записей, так и для учетной записи root. Но проблема возникает только в учетной записи root.
 – 
vfclists
27 Дек 2019 в 12:21
1
%{%f%b%k%} выглядит правильно: он содержит всего три escape-последовательности визуальных эффектов, правильно инкапсулированные. $(build_prompt) вызывает функцию оболочки build_prompt для построения остальной части строки приглашения; вот где ошибка скорее всего. Вы можете запустить функцию build_prompt вручную (возможно, направив ее вывод в od -t x1z для ясности) и сравнить результаты, когда вы являетесь пользователем root и обычным пользователем. Это может быть какая-то функция oh-my-zsh, предназначенная для того, чтобы подчеркнуть тот факт, что вы в настоящее время являетесь пользователем root. Найти причину будет проще, если вы узнаете ошибку в выводе build_prompt.
 – 
telcoM
27 Дек 2019 в 17:38

1 ответ

У меня была эта проблема в oh-my-zsh в docker, и я решил ее с помощью следующих строк в Dockerfile:

RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
    locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8 

Если вы работаете непосредственно на хосте, попробуйте выполнить действия на шаге RUN и использовать export для экспорта переменных среды.

Чтобы сделать изменения постоянными, вы можете поместить операторы экспорта в свой ~/.zshrc.

Чтобы проверить, что это работает:

print -l -- '+--+' '|\u26A1|' '+--+'

Должен отображать:

enter image description here

1
Mihai Galos 8 Окт 2021 в 10:22