aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Hahler <git@thequod.de>2019-09-22 19:49:03 +0200
committerDaniel Hahler <git@thequod.de>2019-09-22 20:11:04 +0200
commit97b82553e09b949cae90c6e755d218d5cdca8f12 (patch)
tree8e1b36302490df8331213af293b4038978c7e0e7 /src
parent6807779c68220e738b99486118c97c0ebc108b0e (diff)
downloadrneovim-97b82553e09b949cae90c6e755d218d5cdca8f12.tar.gz
rneovim-97b82553e09b949cae90c6e755d218d5cdca8f12.tar.bz2
rneovim-97b82553e09b949cae90c6e755d218d5cdca8f12.zip
vim-patch:8.1.2052: using "x" before a closed fold may delete that fold
Problem: Using "x" before a closed fold may delete that fold. Solution: Do not translate 'x' do "dl". (Christian Brabandt, closes vim/vim#4927) https://github.com/vim/vim/commit/7a9bd7c1e0ce1baf5a02daf36eeae3638aa315c7
Diffstat (limited to 'src')
-rw-r--r--src/nvim/normal.c9
-rw-r--r--src/nvim/testdir/test_fold.vim12
2 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index e7e6d2b365..ffdc8e23d7 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -6248,7 +6248,14 @@ static void nv_optrans(cmdarg_T *cap)
if (cap->count0) {
stuffnumReadbuff(cap->count0);
}
- stuffReadbuff(ar[strchr(str, (char)cap->cmdchar) - str]);
+ // If on an empty line and using 'x' and "l" is included in the
+ // whichwrap option, do not delete the next line.
+ if (cap->cmdchar == 'x' && vim_strchr(p_ww, 'l') != NULL
+ && gchar_cursor() == NUL) {
+ stuffReadbuff((char *)"dd");
+ } else {
+ stuffReadbuff(ar[strchr(str, (char)cap->cmdchar) - str]);
+ }
}
cap->opcount = 0;
}
diff --git a/src/nvim/testdir/test_fold.vim b/src/nvim/testdir/test_fold.vim
index 3cb42579be..03723b3cb5 100644
--- a/src/nvim/testdir/test_fold.vim
+++ b/src/nvim/testdir/test_fold.vim
@@ -756,3 +756,15 @@ func Test_fold_delete_with_marker()
bwipe!
bwipe!
endfunc
+
+func Test_fold_delete_with_marker_and_whichwrap()
+ new
+ let content1 = ['']
+ let content2 = ['folded line 1 "{{{1', ' test', ' test2', ' test3', '', 'folded line 2 "{{{1', ' test', ' test2', ' test3']
+ call setline(1, content1 + content2)
+ set fdm=marker ww+=l
+ normal! x
+ call assert_equal(content2, getline(1, '$'))
+ set fdm& ww&
+ bwipe!
+endfunc