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++;
        }

Reply via email to