aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ops.c9
-rw-r--r--src/nvim/testdir/test_normal.vim63
-rw-r--r--src/nvim/version.c4
3 files changed, 37 insertions, 39 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 1e4d392754..3a682b6f96 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -3847,6 +3847,7 @@ fex_format (
int use_sandbox = was_set_insecurely((char_u *)"formatexpr",
OPT_LOCAL);
int r;
+ char_u *fex;
/*
* Set v:lnum to the first line number and v:count to the number of lines.
@@ -3856,16 +3857,22 @@ fex_format (
set_vim_var_nr(VV_COUNT, (varnumber_T)count);
set_vim_var_char(c);
+ // Make a copy, the option could be changed while calling it.
+ fex = vim_strsave(curbuf->b_p_fex);
+ if (fex == NULL) {
+ return 0;
+ }
/*
* Evaluate the function.
*/
if (use_sandbox)
++sandbox;
- r = eval_to_number(curbuf->b_p_fex);
+ r = (int)eval_to_number(fex);
if (use_sandbox)
--sandbox;
set_vim_var_string(VV_CHAR, NULL, -1);
+ xfree(fex);
return r;
}
diff --git a/src/nvim/testdir/test_normal.vim b/src/nvim/testdir/test_normal.vim
index 98cb7754bb..9a8f8f83be 100644
--- a/src/nvim/testdir/test_normal.vim
+++ b/src/nvim/testdir/test_normal.vim
@@ -36,47 +36,14 @@ function! CountSpaces(type, ...)
endfunction
fun! Test_normal00_optrans()
- " Attention: This needs to be the very first test,
- " it will fail, if it runs later, don't know why!
- " Test for S s and alike comamnds, that are internally handled aliased
new
call append(0, ['1 This is a simple test: abcd', '2 This is the second line', '3 this is the third line'])
1
exe "norm! Sfoobar\<esc>"
call assert_equal(['foobar', '2 This is the second line', '3 this is the third line', ''], getline(1,'$'))
2
- " Test does not work
- " TODO: Why does it not work?
- " Adds an additional linebreak if used in visual mode...
- " When run in the test, this returns:
- " ,--------
- " |foobar
- " |2 This is
- " |the second
- " |one
- " |3 this is the third line
- " `-----------
- " instead of
- " ,--------
- " |foobar
- " |2 This is the second one
- " |3 this is the third line
- " `-----------
exe "norm! $vbsone"
call assert_equal(['foobar', '2 This is the second one', '3 this is the third line', ''], getline(1,'$'))
- " When run in the test, this returns:
- " ,--------
- " |foobar
- " |Second line
- " |here
- " |3 this is the third line
- " `-----------
- " instead of
- " ,--------
- " |foobar
- " |Second line here
- " |3 this is the third line
- " `-----------
norm! VS Second line here
call assert_equal(['foobar', ' Second line here', '3 this is the third line', ''], getline(1, '$'))
%d
@@ -192,6 +159,30 @@ func! Test_normal05_formatexpr()
bw!
endfu
+func Test_normal05_formatexpr_newbuf()
+ " Edit another buffer in the 'formatexpr' function
+ new
+ func! Format()
+ edit another
+ endfunc
+ set formatexpr=Format()
+ norm gqG
+ bw!
+ set formatexpr=
+endfunc
+
+func Test_normal05_formatexpr_setopt()
+ " Change the 'formatexpr' value in the function
+ new
+ func! Format()
+ set formatexpr=
+ endfunc
+ set formatexpr=Format()
+ norm gqG
+ bw!
+ set formatexpr=
+endfunc
+
func! Test_normal06_formatprg()
" basic test for formatprg
" only test on non windows platform
@@ -224,7 +215,7 @@ func! Test_normal07_internalfmt()
norm! gggqG
call assert_equal(['1 2 3', '4 5 6', '7 8 9', '10 11 '], getline(1, '$'))
" clean up
- set formatprg=
+ set formatprg= tw=0
bw!
endfu
@@ -1695,7 +1686,7 @@ fun! Test_normal35_g_cmd4()
" Test for g<
" Cannot capture its output,
" probably a bug, therefore, test disabled:
- return
+ throw "Skipped: output of g< can't be tested currently"
echo "a\nb\nc\nd"
let b=execute(':norm! g<')
call assert_true(!empty(b), 'failed `execute(g<)`')
@@ -1853,7 +1844,7 @@ fun! Test_normal41_insert_reg()
" clean up
set sts=0 sw=8 ts=8
- "bw!
+ bw!
endfu
func! Test_normal42_halfpage()
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 09fe1d029b..dd7318b697 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -108,7 +108,7 @@ static int included_patches[] = {
// 2336,
2335,
// 2334,
- // 2333,
+ 2333,
// 2332 NA
2331,
// 2330,
@@ -118,7 +118,7 @@ static int included_patches[] = {
2326,
// 2325 NA
// 2324,
- // 2323,
+ 2323,
2322,
2321,
// 2320,