Я пытаюсь сделать очень простой (односимвольный) запрос, который дает мне как можно больше информации. Вот что у меня есть на данный момент (было целую вечность, не помню, где я нашел оригинал):
# RPS1="['%1v', '%2v', '%3v', '%4v', '%5v', '%6v', '%7v', '%8v', '%9v']" # debug
PS1=" %(?|%2F|%1F)%1(V|%1v|%(#|#|:))%(?|%2f|%1f) "
function zle-line-init {
zle -K vicmd
}
zle -N zle-line-init
function zle-keymap-select {
psvar[1]="${${KEYMAP/(main|viins)/>}/vicmd/}"
zle reset-prompt
psvar[1]=""
}
zle -N zle-keymap-select
Это довольно просто; он инициализирует приглашение в командном режиме при рендеринге и отображает приглашение :
в режиме «команды» vi и приглашение >
(путем изменения psvar[1]
) в режиме «вставки» vi. Кроме того, :
заменяется на #
, если вы выступаете в роли пользователя root, а цвет символа показывает состояние выхода последней команды.
Моя проблема:
При изменении раскладки клавиатуры (то есть, когда я переключаюсь в режимах «команда» и «вставка», используя, например, a
, а затем клавишу Escape, состояние выхода $?
перекрывается успешное состояние 0
, в результате чего приглашение отображается зеленым, а не красным (даже если предыдущая команда не выполнена). Как сохранить или настроить приглашение таким образом, чтобы части %(?|…|…)
$PS1
правильно отображали выход статус последней команды, отправленной в оболочку ?