Is there a particular prompt that you had in mind? I've customized the eriner prompt to include an indicator, but it also includes moving the prompt to a new line.

I'll format my changes a little better and make a fork.
@Valinora looks good! Perhaps for the eriner prompt, keep it on one line, but "flip" the arrow arround (or make it hollow), see the SEGMENT_SEPARATOR. Maybe change it from this, to this?:
printf '\ue0b2'
.. and do a flip, --> becomes <--, then redraw the prompt? Seems like that would be the "inline" solution. Cheers! :+1:
With this theme, in longer directories the prompt is in the middle of the terminal, and get get pretty ugly in low resolution/small terminals with tiling WMs. That's why it's only a fork, and not a PR, because it has those customizations.
I'll make a branch with and try to get a few prompts working with more thematic indicators for each prompt.
I use the 'Lean' prompt, but since that's external, a fork would probably required. I'd be perfectly willing to switch, but not to a two-line prompt, since in my usage vertical space is always lacking.
I'm not sure how easy it will be to tell which mode is currently active at a glance in your solution, though. Maybe just add 'Insert' text to the end of the prompt line to mimic Vim behavior? Since many prompts don't modify the end of the line, it might be easier to hack into prompts, although I know little about that.
In mine, the arrow becomes red and faces the other direction when you're in 'NORMAL' mode. For the non-external themes I was planning on using a similar approach in a theme appropriate manor, however using a right hand side '[normal]' indicator should be pretty straightforward to implement.
These are my initial ideas: Imgur Album
I wouldn't leave those as the final colour, however I think that I don't have to go that far as the RPROMPT method is fairly clearly the winner.
The second screenshot looks perfect. The only nitpick is that it should be styled like '-- INSERT --', like in Vim, but that's of virtually no importance c:
You probably can make the style used configurable through '.zimrc'. Some people put Git info, the clock or some other data there. I always thought it looks ugly when it inevitably overflows, but it's a matter of taste, I guess.
It's easy to get to the following result, which I think would looker nicer than anything else (last line is in vicmd mode, with all separators inverted):

Just replace \uE0B0 by %S\uE0B2%s. I've used this with my Agnoster prompt for Prezto.
As per https://github.com/Eriner/zim/pull/130, what we might need is a module for edit mode theming, as changing each prompt separately would create too much repeated code.
While not related to Zim _per se_, it's possible to make vi mode visible with powerlevel9k and this in .zshrc, in addition to enabling vi_mode prompt segment:
function zle-line-init {
powerlevel9k_prepare_prompts
if (( ${+terminfo[smkx]} )); then
printf '%s' ${terminfo[smkx]}
fi
zle reset-prompt
zle -R
}
function zle-line-finish {
powerlevel9k_prepare_prompts
if (( ${+terminfo[rmkx]} )); then
printf '%s' ${terminfo[rmkx]}
fi
zle reset-prompt
zle -R
}
function zle-keymap-select {
powerlevel9k_prepare_prompts
zle reset-prompt
zle -R
}
zle -N zle-line-init
zle -N ale-line-finish
zle -N zle-keymap-select
Most helpful comment
It's easy to get to the following result, which I think would looker nicer than anything else (last line is in vicmd mode, with all separators inverted):
Just replace
\uE0B0by%S\uE0B2%s. I've used this with my Agnoster prompt for Prezto.As per https://github.com/Eriner/zim/pull/130, what we might need is a module for edit mode theming, as changing each prompt separately would create too much repeated code.