diff options
-rw-r--r-- | runtime/doc/change.txt | 3 | ||||
-rw-r--r-- | runtime/doc/motion.txt | 4 | ||||
-rw-r--r-- | runtime/doc/options.txt | 4 | ||||
-rw-r--r-- | src/nvim/normal.c | 41 | ||||
-rw-r--r-- | src/nvim/option_defs.h | 5 |
5 files changed, 15 insertions, 42 deletions
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt index c27076dd23..2453cd2caf 100644 --- a/runtime/doc/change.txt +++ b/runtime/doc/change.txt @@ -248,9 +248,6 @@ Special case: When the cursor is in a word, "cw" and "cW" do not include the white space after a word, they only change up to the end of the word. This is because Vim interprets "cw" as change-word, and a word does not include the following white space. -{Vi: "cw" when on a blank followed by other blanks changes only the first -blank; this is probably a bug, because "dw" deletes all the blanks; use the -'w' flag in 'cpoptions' to make it work like Vi anyway} If you prefer "cw" to include the space after a word, use this mapping: > :map cw dwi diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt index 6d79f6a66b..2d4f23d443 100644 --- a/runtime/doc/motion.txt +++ b/runtime/doc/motion.txt @@ -409,9 +409,7 @@ WORD before the fold. Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is on a non-blank. This is because "cw" is interpreted as change-word, and a -word does not include the following white space. {Vi: "cw" when on a blank -followed by other blanks changes only the first blank; this is probably a -bug, because "dw" deletes all the blanks} +word does not include the following white space. Another special case: When using the "w" motion in combination with an operator and the last word moved over is at the end of a line, the end of diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 443fe065e7..3ef3e689a6 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1945,10 +1945,6 @@ A jump table for the options with a short description can be found at |Q_op|. erased from the screen right away. With this flag the screen newly typed text overwrites backspaced characters. - *cpo-w* - w When using "cw" on a blank character, only change one - character and not all blanks until the start of the - next word. *cpo-W* W Don't overwrite a readonly file. When omitted, ":w!" overwrites a readonly file, if possible. diff --git a/src/nvim/normal.c b/src/nvim/normal.c index b122b3e1d5..b7f2666968 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -6714,35 +6714,18 @@ static void nv_wordcmd(cmdarg_T *cap) */ if (!word_end && cap->oap->op_type == OP_CHANGE) { n = gchar_cursor(); - if (n != NUL) { /* not an empty line */ - if (ascii_iswhite(n)) { - /* - * Reproduce a funny Vi behaviour: "cw" on a blank only - * changes one character, not all blanks until the start of - * the next word. Only do this when the 'w' flag is included - * in 'cpoptions'. - */ - if (cap->count1 == 1 && vim_strchr(p_cpo, CPO_CW) != NULL) { - cap->oap->inclusive = true; - cap->oap->motion_type = MCHAR; - return; - } - } else { - /* - * This is a little strange. To match what the real Vi does, - * we effectively map 'cw' to 'ce', and 'cW' to 'cE', provided - * that we are not on a space or a TAB. This seems impolite - * at first, but it's really more what we mean when we say - * 'cw'. - * Another strangeness: When standing on the end of a word - * "ce" will change until the end of the next word, but "cw" - * will change only one character! This is done by setting - * flag. - */ - cap->oap->inclusive = true; - word_end = true; - flag = true; - } + if (n != NUL && !ascii_iswhite(n)) { + // This is a little strange. To match what the real Vi does, we + // effectively map "cw" to "ce", and "cW" to "cE", provided that we are + // not on a space or a TAB. This seems impolite at first, but it's + // really more what we mean when we say "cw". + // + // Another strangeness: When standing on the end of a word "ce" will + // change until the end of the next word, but "cw" will change only one + // character! This is done by setting "flag". + cap->oap->inclusive = true; + word_end = true; + flag = true; } } diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index cb2a36df4d..e40234f671 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -119,7 +119,6 @@ #define CPO_TAGPAT 't' #define CPO_UNDO 'u' /* "u" undoes itself */ #define CPO_BACKSPACE 'v' /* "v" keep deleted text */ -#define CPO_CW 'w' /* "cw" only changes one blank */ #define CPO_FWRITE 'W' /* "w!" doesn't overwrite readonly files */ #define CPO_ESC 'x' #define CPO_REPLCNT 'X' /* "R" with a count only deletes chars once */ @@ -145,9 +144,9 @@ * cursor would not move */ /* default values for Vim, Vi and POSIX */ #define CPO_VIM "aABceFs" -#define CPO_VI "aAbBcCdDeEfFHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;" +#define CPO_VI "aAbBcCdDeEfFHiIjJkKlLmMnoOpPqrRsStuvWxXyZ$!%*-+<>;" #define CPO_ALL \ - "aAbBcCdDeEfFHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;" + "aAbBcCdDeEfFHiIjJkKlLmMnoOpPqrRsStuvWxXyZ$!%*-+<>#{|&/\\.;" /* characters for p_ww option: */ #define WW_ALL "bshl<>[],~" |