Я искал несколько ответов здесь и через Google, но я все еще не уверен, что происходит с моей подсказкой.Проблемы с заменой ZSH
Согласно документации, я прочитал, что это должно работать
setopt prompt_subst
autoload -U colors && colors
PROMPT="%{[00m[38;5;245m%}test %D%{[00m%}"
Моя подсказка заключается в следующем, однако:
[00m[38;5;245mtest 15-07-01[00m
Обратите внимание, что расширение дата на самом деле работал, поэтому приглашение замена за работой. На страницах руководства ZSH для быстрого расширения указано, что %{...%}
следует рассматривать как исходный код выхода, но это, похоже, не происходит. Передача этой строки в print -P
также приводит к выходу выше. Я нашел примеры запросов в Интернете для ZSH, которые также, похоже, указывают на то, что приведенный выше синтаксис должен работать. См. this для одного примера: массивы $ FG и $ FX заполняются кодами побега и определены here. Я пробовал этот пример напрямую, объединив оба файла выше, добавив setopt prompt_subst
в начало, чтобы убедиться, что он установлен, затем поиск его и подсказка - беспорядок escape-кодов.
следующие работы
setopt prompt_subst
autoload -U colors && colors
PROMPT=$'%{\e[00m\e[38;5;245m%}test %D%{\e[00m%}'
я получаю ожидаемый результат test 15-07-01
в правильный цвет.
Я тестировал это на ZSH 5.0.5 в OSX Yosimite, 5.0.7 от MacPorts и 4.3.17 на Debian, с теми же результатами. Я знаю, что я представил правильное решение моей проблемы здесь с рабочим примером, но мне интересно, почему первый синтаксис не работает, как кажется.
Здесь нет проблем; если в документации, которую вы читаете, отсутствует символ escape, это неправильно. Коды ANSI, которые инструктируют терминал переключать цвета, начинаются с 'ESC [', а не только ''. – chepner
Обратите внимание, что проще использовать встроенные экраны для изменения цвета, чем для обработки необработанных контрольных последовательностей. 'prompt ="% F {245} test% D% f "' – chepner
Вы можете предположить, что '% {...%}' предоставляет escape-символ для начала каждой последовательности; то, что он на самом деле делает, просто инструктирует оболочку, что содержимое фигурных скобок занимает нулевое пространство на выходе, поэтому можно вычислить правильную длину экрана на экране. – chepner