The problem was just as you desribed. Below is a diff to restore 'B' and
do the right thing on ^W. Thanks!
--- /usr/src/bin/ksh/vi.c Tue Jun 9 10:32:27 2009
+++ vi.c Tue Jun 9 10:38:15 2009
@@ -596,7 +596,7 @@ vi_insert(int ch)
}
if (ch == edchars.werase) {
if (es->cursor != 0) {
- tcursor = Backword(1);
+ tcursor = backword(1);
memmove(&es->cbuf[tcursor], &es->cbuf[es->cursor],
es->linelen - es->cursor);
es->linelen -= es->cursor - tcursor;
@@ -1598,9 +1598,9 @@ Backword(int argcnt)
ncursor = es->cursor;
while (ncursor > 0 && argcnt--) {
- while (--ncursor >= 0 && !is_wordch(es->cbuf[ncursor]))
+ while (--ncursor >= 0 && isspace(es->cbuf[ncursor]))
;
- while (ncursor >= 0 && is_wordch(es->cbuf[ncursor]))
+ while (ncursor >= 0 && !isspace(es->cbuf[ncursor]))
ncursor--;
ncursor++;
}