Подтвердить что ты не робот

Остальные символы при заполнении вкладки с помощью ZSH

Я использую oh-my-zsh в Arch linux с загруженной темой robbyrussell. Когда я пытаюсь выполнить вкладку, я заканчиваю остальными символами, добавленными в приглашение. Если я удалю автоматически заполненные символы, оставшиеся символы не удаляются.

Например, если я ввожу:

~ /etc

затем вкладка, она превратится в

~ /e/etc/

со списком параметров ниже. Даже если я удалю /etc/, /e останется, и я застрял с:

~ /e

Я не могу удалить /e. Я должен выполнить команду, чтобы избавиться от остаточного символа.

Любая идея, что здесь происходит?

4b9b3361

Ответ 1

Оказывается, это была проблема локали. Запуск locale-gen не работал, пока я не удалил какой-нибудь файл конфигурации и не запустил его.

Ваш совет хорош для подсказки. Спасибо.

Ответ 2

Кажется, у меня были проблемы с настройкой локали и конфигурацией без 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

Ответ 3

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

Вы указываете, что последовательность символов в запросе zsh имеет нулевую ширину, используя разделители %{ и %}. Например, мое приглашение:

%{%(?.%F{green}.%F{red})%}➜%{%f%}

(?...) - это тернар, который задает цвет приглашения, и он был помечен, чтобы указать, что это нулевая ширина. Точно так же %f сбрасывает цвет, который также был помечен.

Вы можете проверить изменения в своем приглашении, обновив переменную PS1, чтобы вы могли попробовать различные варианты и посмотреть, что работает для вас.

Вы можете пометить любые символы таким образом, поэтому будьте осторожны, чтобы сделать ваш запрос слишком коротким!

Ответ 4

У меня была такая же проблема, поэтому в поисках решения я столкнулся с этой статьей: https://wiki.archlinux.org/index.php/Locale

И, как было предложено, чтобы включить некоторые локали в общесистемной системе, вам просто нужно раскомментировать желаемый язык на /etc/locale.gen, например, в моем случае:

en_US.UTF-8 UTF-8

После сохранения изменений в файле выполните (с правами администратора) в командной строке:

locale-gen

Перезагрузитесь, и это сработает! (по крайней мере для меня)

Ответ 5

У меня была аналогичная проблема, хотя и не с oh-my-zsh, а с подсказкой; для меня решение было удалить из моей конфигурации:

ZLE_PROMPT_INDENT=0

Ответ 6

У меня была похожая проблема с темой tjkirch_mod. Всякий раз, когда я работал в грязном git-репо и использовал завершение табуляции, первый символ строки дублировался. Смена персонажа, который указывает на состояние git-репо, решила проблему для меня. Изменено

ZSH_THEME_GIT_PROMPT_DIRTY = "% {$ fg [red]%} ⚡"

в

ZSH_THEME_GIT_PROMPT_DIRTY = "% {$ fg [red]%} x "