mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.1.0043: ++bad argument of :edit does not work properly
Problem: ++bad argument of :edit does not work properly. Solution: Return FAIL from get_bad_opt() only when there is no valid argument. (Dominique Pelle, Christian Brabandt, closes #2966, closes #2947)
This commit is contained in:
@@ -5318,7 +5318,9 @@ get_bad_opt(char_u *p, exarg_T *eap)
|
|||||||
eap->bad_char = BAD_DROP;
|
eap->bad_char = BAD_DROP;
|
||||||
else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
|
else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
|
||||||
eap->bad_char = *p;
|
eap->bad_char = *p;
|
||||||
return FAIL;
|
else
|
||||||
|
return FAIL;
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -1,10 +1,38 @@
|
|||||||
" Tests for complicated + argument to :edit command
|
" Tests for complicated + argument to :edit command
|
||||||
function Test_edit()
|
function Test_edit()
|
||||||
call writefile(["foo|bar"], "Xfile1")
|
call writefile(["foo|bar"], "Xfile1")
|
||||||
call writefile(["foo/bar"], "Xfile2")
|
call writefile(["foo/bar"], "Xfile2")
|
||||||
edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
|
edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
|
||||||
call assert_equal(["fooPIPEbar"], readfile("Xfile1"))
|
call assert_equal(["fooPIPEbar"], readfile("Xfile1"))
|
||||||
call assert_equal(["fooSLASHbar"], readfile("Xfile2"))
|
call assert_equal(["fooSLASHbar"], readfile("Xfile2"))
|
||||||
call delete('Xfile1')
|
call delete('Xfile1')
|
||||||
call delete('Xfile2')
|
call delete('Xfile2')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
func Test_edit_bad()
|
||||||
|
if !has('multi_byte')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Test loading a utf8 file with bad utf8 sequences.
|
||||||
|
call writefile(["[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]"], "Xfile")
|
||||||
|
new
|
||||||
|
|
||||||
|
" Without ++bad=..., the default behavior is like ++bad=?
|
||||||
|
e! ++enc=utf8 Xfile
|
||||||
|
call assert_equal('[?][?][???][??]', getline(1))
|
||||||
|
|
||||||
|
e! ++enc=utf8 ++bad=_ Xfile
|
||||||
|
call assert_equal('[_][_][___][__]', getline(1))
|
||||||
|
|
||||||
|
e! ++enc=utf8 ++bad=drop Xfile
|
||||||
|
call assert_equal('[][][][]', getline(1))
|
||||||
|
|
||||||
|
e! ++enc=utf8 ++bad=keep Xfile
|
||||||
|
call assert_equal("[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]", getline(1))
|
||||||
|
|
||||||
|
call assert_fails('e! ++enc=utf8 ++bad=foo Xfile', 'E474:')
|
||||||
|
|
||||||
|
bw!
|
||||||
|
call delete('Xfile')
|
||||||
|
endfunc
|
||||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
43,
|
||||||
/**/
|
/**/
|
||||||
42,
|
42,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user