]> git.ipfire.org Git - thirdparty/vim.git/commit
patch 9.1.0589: vi: d{motion} and cw work differently than expected v9.1.0589
authorChristian Brabandt <cb@256bit.org>
Mon, 15 Jul 2024 18:51:11 +0000 (20:51 +0200)
committerChristian Brabandt <cb@256bit.org>
Mon, 15 Jul 2024 18:51:11 +0000 (20:51 +0200)
commit22105fd1fe0dcfe993b5c04c6ebe017a626116e3
treeb44c5ccccb241efc4ae9685851d8bc7f1cce8971
parentfcc53461d46ecbf128b5bae943f116dbe4e7ad51
patch 9.1.0589: vi: d{motion} and cw work differently than expected

Problem:  vi: d{motion} and cw command work differently than expected
Solution: add new cpo-z flag to make the behaviour configurable

There are two special vi compatible behaviours (or should I say bugs?):

1): cw behaves differently than dw. That is, because cw is special cased
    by Vim and is effectively aliased to ce.
    POSIX behaviour is documented here:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html#tag_20_152_13_81

2): d{motion} may make the whole delete operation linewise, if the start
    and end of the motion are on different lines and there are only
    blanks before the start and after the end of the motion.
    Did not find a related POSIX link that requires this behaviour.

Both behaviours can be considered inconsistent, but we cannot easily
change it, because it would be a backward incompatible change and also
incompatible to how classic vi behaved.

So let's add the new cpo flag "z", which when not included fixes both
behaviours and make them more consistent to what users would expect.

This has been requested several times:
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/
https://groups.google.com/d/msg/vim_use/vunNWLFWfQg/MmJh_ZGaAgAJ
https://github.com/vim/vim/issues/4390

So in summary, if you want to have the w motion work more consistent,
remove the 'z' from the cpo settings.

related: #4390
closes: #15263

Signed-off-by: Christian Brabandt <cb@256bit.org>
14 files changed:
runtime/doc/change.txt
runtime/doc/motion.txt
runtime/doc/options.txt
runtime/doc/tags
runtime/doc/version9.txt
src/normal.c
src/ops.c
src/option.h
src/testdir/test_codestyle.vim
src/testdir/test_cpoptions.vim
src/testdir/test_options.vim
src/testdir/test_quickfix.vim
src/testdir/test_vim9_script.vim
src/version.c