Ответ 1
Оказывается, это была проблема локали. Запуск locale-gen не работал, пока я не удалил какой-нибудь файл конфигурации и не запустил его.
Ваш совет хорош для подсказки. Спасибо.
Я использую oh-my-zsh в Arch linux с загруженной темой robbyrussell. Когда я пытаюсь выполнить вкладку, я заканчиваю остальными символами, добавленными в приглашение. Если я удалю автоматически заполненные символы, оставшиеся символы не удаляются.
Например, если я ввожу:
~ /etc
затем вкладка, она превратится в
~ /e/etc/
со списком параметров ниже. Даже если я удалю /etc/
, /e
останется, и я застрял с:
~ /e
Я не могу удалить /e
. Я должен выполнить команду, чтобы избавиться от остаточного символа.
Любая идея, что здесь происходит?
Оказывается, это была проблема локали. Запуск locale-gen не работал, пока я не удалил какой-нибудь файл конфигурации и не запустил его.
Ваш совет хорош для подсказки. Спасибо.
Кажется, у меня были проблемы с настройкой локали и конфигурацией без UTF8
В моем случае исправление было:
export LC_ALL="en_US.UTF-8"
и сохраните его, добавив строку в .zshrc:
echo "export LC_ALL=en_US.UTF-8" >> .zshrc
Дополнительная информация в документе Ubuntu https://help.ubuntu.com/community/Locale
Как было предложено simont, вероятно, что приглашение, которое вы используете, использует непечатаемые символы (например, цветовые escape-коды), но не означает, что эти символы непечатаемы. Поэтому, когда запрос перерисовывается, терминал считает, что подсказка шире, чем на самом деле.
Вы указываете, что последовательность символов в запросе zsh имеет нулевую ширину, используя разделители %{
и %}
. Например, мое приглашение:
%{%(?.%F{green}.%F{red})%}➜%{%f%}
(?...)
- это тернар, который задает цвет приглашения, и он был помечен, чтобы указать, что это нулевая ширина. Точно так же %f
сбрасывает цвет, который также был помечен.
Вы можете проверить изменения в своем приглашении, обновив переменную PS1, чтобы вы могли попробовать различные варианты и посмотреть, что работает для вас.
Вы можете пометить любые символы таким образом, поэтому будьте осторожны, чтобы сделать ваш запрос слишком коротким!
У меня была такая же проблема, поэтому в поисках решения я столкнулся с этой статьей: https://wiki.archlinux.org/index.php/Locale
И, как было предложено, чтобы включить некоторые локали в общесистемной системе, вам просто нужно раскомментировать желаемый язык на /etc/locale.gen
, например, в моем случае:
en_US.UTF-8 UTF-8
После сохранения изменений в файле выполните (с правами администратора) в командной строке:
locale-gen
Перезагрузитесь, и это сработает! (по крайней мере для меня)
У меня была аналогичная проблема, хотя и не с oh-my-zsh, а с подсказкой; для меня решение было удалить из моей конфигурации:
ZLE_PROMPT_INDENT=0
У меня была похожая проблема с темой tjkirch_mod. Всякий раз, когда я работал в грязном git-репо и использовал завершение табуляции, первый символ строки дублировался. Смена персонажа, который указывает на состояние git-репо, решила проблему для меня. Изменено
ZSH_THEME_GIT_PROMPT_DIRTY = "% {$ fg [red]%} ⚡"
в
ZSH_THEME_GIT_PROMPT_DIRTY = "% {$ fg [red]%} x "