'cpoptions': "_" flag to toggle cw behaviour #6235

`cw` and `cW` behave like `ce` and `cE` respectively. This is
inconsistent compared to `dw` and `dW`.
Introduce a new cpoptions flag "_" to toggle the Vi behavior.

Closes #6234
Patch-by: Christian Brabandt <cblists@256bit.org>

References:
https://github.com/chrisbra/vim-mq-patches/blob/master/cpo_changeword
https://groups.google.com/d/msg/vim_use/aaBqT6ECkA4/ALf4odKzEDgJ
https://groups.google.com/d/msg/vim_dev/Dpn3xtUF16I/T6JcOPKN6usJ
http://www.reddit.com/r/vim/comments/26nut8/why_does_cw_work_like_ce/
This commit is contained in:
raichoo 2017-03-07 23:26:21 +01:00 committed by Justin M. Keyes
parent 59ea30adda
commit 1743df82f9
5 changed files with 13 additions and 7 deletions

View File

@ -401,8 +401,7 @@ a range of folded lines. "b" and "B" move to the start of the first word or
WORD before the fold. WORD before the fold.
Special case: "cw" and "cW" are treated like "ce" and "cE" if the cursor is 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 on a non-blank. This is Vi-compatible, see |cpo-_| to change the behavior.
word does not include the following white space.
Another special case: When using the "w" motion in combination with an 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 operator and the last word moved over is at the end of a line, the end of

View File

@ -1829,6 +1829,9 @@ A jump table for the options with a short description can be found at |Q_op|.
character, the cursor won't move. When not included, character, the cursor won't move. When not included,
the cursor would skip over it and jump to the the cursor would skip over it and jump to the
following occurrence. following occurrence.
*cpo-_*
_ When using |cw| on a word, do not include the
whitespace following the word in the motion.
*'cscopepathcomp'* *'cspc'* *'cscopepathcomp'* *'cspc'*
'cscopepathcomp' 'cspc' number (default 0) 'cscopepathcomp' 'cspc' number (default 0)

View File

@ -108,6 +108,7 @@ Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants
<C-Tab>, <C-S-Tab>, <C-BS>, <C-S-BS>, <C-Enter>, <C-S-Enter> <C-Tab>, <C-S-Tab>, <C-BS>, <C-S-BS>, <C-Enter>, <C-S-Enter>
Options: Options:
'cpoptions' flags: |cpo-_|
'inccommand' shows interactive results for |:substitute|-like commands 'inccommand' shows interactive results for |:substitute|-like commands
'statusline' supports unlimited alignment sections 'statusline' supports unlimited alignment sections
'tabline' %@Func@foo%X can call any function on mouse-click 'tabline' %@Func@foo%X can call any function on mouse-click

View File

@ -7193,8 +7193,10 @@ static void nv_wordcmd(cmdarg_T *cap)
// Another strangeness: When standing on the end of a word "ce" will // 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 // change until the end of the next word, but "cw" will change only one
// character! This is done by setting "flag". // character! This is done by setting "flag".
cap->oap->inclusive = true; if (vim_strchr(p_cpo, CPO_CHANGEW) != NULL) {
word_end = true; cap->oap->inclusive = true;
word_end = true;
}
flag = true; flag = true;
} }
} }

View File

@ -129,9 +129,10 @@
#define CPO_REGAPPEND '>' /* insert NL when appending to a register */ #define CPO_REGAPPEND '>' /* insert NL when appending to a register */
#define CPO_SCOLON ';' /* using "," and ";" will skip over char if #define CPO_SCOLON ';' /* using "," and ";" will skip over char if
* cursor would not move */ * cursor would not move */
/* default values for Vim and Vi */ #define CPO_CHANGEW '_' // "cw" special-case
#define CPO_VIM "aABceFs" // default values for Vim and Vi
#define CPO_VI "aAbBcCdDeEfFiIJkKlLmMnoOpPqrRsStuvWxXyZ$!%+<>;" #define CPO_VIM "aABceFs_"
#define CPO_VI "aAbBcCdDeEfFiIJkKlLmMnoOpPqrRsStuvWxXyZ$!%+<>;_"
/* characters for p_ww option: */ /* characters for p_ww option: */
#define WW_ALL "bshl<>[],~" #define WW_ALL "bshl<>[],~"