diff -urp current/readline.c working/readline.c --- current/readline.c 2017-01-30 04:55:51 +1000 +++ working/readline.c 2017-02-21 16:05:49 +1000 @@ -419,7 +419,10 @@ readline_internal_setup () #if defined (VI_MODE) if (rl_editing_mode == vi_mode) rl_vi_insertion_mode (1, 'i'); /* don't want to reset last */ + else #endif /* VI_MODE */ + if (_rl_show_mode_in_prompt) + _rl_reset_prompt (); /* If we're not echoing, we still want to at least print a prompt, because rl_redisplay will not do it for us. If the calling application has a diff -urp current/vi_mode.c working/vi_mode.c --- current/vi_mode.c 2017-01-30 04:55:51 +1000 +++ working/vi_mode.c 2017-02-21 16:05:49 +1000 @@ -594,7 +594,8 @@ rl_vi_bword (count, ignore) so we will go back to the start of the previous word. */ if (!whitespace (rl_line_buffer[rl_point]) && whitespace (rl_line_buffer[rl_point - 1])) - rl_point--; + if (--rl_point == 0) + break; /* If this character and the previous character are `opposite', move back so we don't get messed up by the rl_point++ down there in