mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.4.503
Problem: Cannot append a list of lines to a file. Solution: Add the append option to writefile(). (Yasuhiro Matsumoto)
This commit is contained in:
parent
4391cf98ec
commit
6b2e938f13
@ -2041,7 +2041,7 @@ winrestcmd() String returns command to restore window sizes
|
|||||||
winrestview( {dict}) none restore view of current window
|
winrestview( {dict}) none restore view of current window
|
||||||
winsaveview() Dict save view of current window
|
winsaveview() Dict save view of current window
|
||||||
winwidth( {nr}) Number width of window {nr}
|
winwidth( {nr}) Number width of window {nr}
|
||||||
writefile( {list}, {fname} [, {binary}])
|
writefile( {list}, {fname} [, {flags}])
|
||||||
Number write list of lines to file {fname}
|
Number write list of lines to file {fname}
|
||||||
xor( {expr}, {expr}) Number bitwise XOR
|
xor( {expr}, {expr}) Number bitwise XOR
|
||||||
|
|
||||||
@ -6555,14 +6555,20 @@ winwidth({nr}) *winwidth()*
|
|||||||
:endif
|
:endif
|
||||||
<
|
<
|
||||||
*writefile()*
|
*writefile()*
|
||||||
writefile({list}, {fname} [, {binary}])
|
writefile({list}, {fname} [, {flags}])
|
||||||
Write |List| {list} to file {fname}. Each list item is
|
Write |List| {list} to file {fname}. Each list item is
|
||||||
separated with a NL. Each list item must be a String or
|
separated with a NL. Each list item must be a String or
|
||||||
Number.
|
Number.
|
||||||
When {binary} is equal to "b" binary mode is used: There will
|
When {flags} contains "b" then binary mode is used: There will
|
||||||
not be a NL after the last list item. An empty item at the
|
not be a NL after the last list item. An empty item at the
|
||||||
end does cause the last line in the file to end in a NL.
|
end does cause the last line in the file to end in a NL.
|
||||||
All NL characters are replaced with a NUL character.
|
|
||||||
|
When {flags} contains "a" then append mode is used, lines are
|
||||||
|
append to the file: >
|
||||||
|
:call writefile(["foo"], "event.log", "a")
|
||||||
|
:call writefile(["bar"], "event.log", "a")
|
||||||
|
>
|
||||||
|
< All NL characters are replaced with a NUL character.
|
||||||
Inserting CR characters needs to be done before passing {list}
|
Inserting CR characters needs to be done before passing {list}
|
||||||
to writefile().
|
to writefile().
|
||||||
An existing file is overwritten, if possible.
|
An existing file is overwritten, if possible.
|
||||||
|
@ -1899,8 +1899,12 @@ test1 test2 test3 test4 test5 test6 test7 test8 test9 \
|
|||||||
test_insertcount \
|
test_insertcount \
|
||||||
test_listlbr \
|
test_listlbr \
|
||||||
test_listlbr_utf8 \
|
test_listlbr_utf8 \
|
||||||
|
test_mapping \
|
||||||
test_options \
|
test_options \
|
||||||
test_qf_title \
|
test_qf_title \
|
||||||
|
test_signs \
|
||||||
|
test_utf8 \
|
||||||
|
test_writefile \
|
||||||
test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
|
test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
|
||||||
test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
|
test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
|
||||||
test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
|
test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
|
||||||
|
14
src/eval.c
14
src/eval.c
@ -19689,6 +19689,7 @@ f_writefile(argvars, rettv)
|
|||||||
typval_T *rettv;
|
typval_T *rettv;
|
||||||
{
|
{
|
||||||
int binary = FALSE;
|
int binary = FALSE;
|
||||||
|
int append = FALSE;
|
||||||
char_u *fname;
|
char_u *fname;
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -19704,14 +19705,19 @@ f_writefile(argvars, rettv)
|
|||||||
if (argvars[0].vval.v_list == NULL)
|
if (argvars[0].vval.v_list == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (argvars[2].v_type != VAR_UNKNOWN
|
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||||
&& STRCMP(get_tv_string(&argvars[2]), "b") == 0)
|
{
|
||||||
binary = TRUE;
|
if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL)
|
||||||
|
binary = TRUE;
|
||||||
|
if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL)
|
||||||
|
append = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Always open the file in binary mode, library functions have a mind of
|
/* Always open the file in binary mode, library functions have a mind of
|
||||||
* their own about CR-LF conversion. */
|
* their own about CR-LF conversion. */
|
||||||
fname = get_tv_string(&argvars[1]);
|
fname = get_tv_string(&argvars[1]);
|
||||||
if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL)
|
if (*fname == NUL || (fd = mch_fopen((char *)fname,
|
||||||
|
append ? APPENDBIN : WRITEBIN)) == NULL)
|
||||||
{
|
{
|
||||||
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
|
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
18
src/testdir/test_writefile.in
Normal file
18
src/testdir/test_writefile.in
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Tests for writefile()
|
||||||
|
|
||||||
|
STARTTEST
|
||||||
|
:source small.vim
|
||||||
|
:%delete _
|
||||||
|
:let f = tempname()
|
||||||
|
:call writefile(["over","written"], f, "b")
|
||||||
|
:call writefile(["hello","world"], f, "b")
|
||||||
|
:call writefile(["!", "good"], f, "a")
|
||||||
|
:call writefile(["morning"], f, "ab")
|
||||||
|
:call writefile(["", "vimmers"], f, "ab")
|
||||||
|
:bwipeout!
|
||||||
|
:$put =readfile(f)
|
||||||
|
:1 delete _
|
||||||
|
:w! test.out
|
||||||
|
:qa!
|
||||||
|
ENDTEST
|
||||||
|
|
5
src/testdir/test_writefile.ok
Normal file
5
src/testdir/test_writefile.ok
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
hello
|
||||||
|
world!
|
||||||
|
good
|
||||||
|
morning
|
||||||
|
vimmers
|
@ -741,6 +741,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 */
|
||||||
|
/**/
|
||||||
|
503,
|
||||||
/**/
|
/**/
|
||||||
502,
|
502,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user