forked from aniani/vim
updated for version 7.3.1197
Problem: ":wviminfo!" does not write history previously read from a viminfo file. (Roland Eggner) Solution: When not merging history write all entries.
This commit is contained in:
@@ -1722,11 +1722,11 @@ read_viminfo(file, flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* write_viminfo() -- Write the viminfo file. The old one is read in first so
|
* Write the viminfo file. The old one is read in first so that effectively a
|
||||||
* that effectively a merge of current info and old info is done. This allows
|
* merge of current info and old info is done. This allows multiple vims to
|
||||||
* multiple vims to run simultaneously, without losing any marks etc. If
|
* run simultaneously, without losing any marks etc.
|
||||||
* forceit is TRUE, then the old file is not read in, and only internal info is
|
* If "forceit" is TRUE, then the old file is not read in, and only internal
|
||||||
* written to the file. -- webb
|
* info is written to the file.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
write_viminfo(file, forceit)
|
write_viminfo(file, forceit)
|
||||||
@@ -2047,6 +2047,7 @@ do_viminfo(fp_in, fp_out, flags)
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
int eof = FALSE;
|
int eof = FALSE;
|
||||||
vir_T vir;
|
vir_T vir;
|
||||||
|
int merge = FALSE;
|
||||||
|
|
||||||
if ((vir.vir_line = alloc(LSIZE)) == NULL)
|
if ((vir.vir_line = alloc(LSIZE)) == NULL)
|
||||||
return;
|
return;
|
||||||
@@ -2058,9 +2059,12 @@ do_viminfo(fp_in, fp_out, flags)
|
|||||||
if (fp_in != NULL)
|
if (fp_in != NULL)
|
||||||
{
|
{
|
||||||
if (flags & VIF_WANT_INFO)
|
if (flags & VIF_WANT_INFO)
|
||||||
|
{
|
||||||
eof = read_viminfo_up_to_marks(&vir,
|
eof = read_viminfo_up_to_marks(&vir,
|
||||||
flags & VIF_FORCEIT, fp_out != NULL);
|
flags & VIF_FORCEIT, fp_out != NULL);
|
||||||
else
|
merge = TRUE;
|
||||||
|
}
|
||||||
|
else if (flags != 0)
|
||||||
/* Skip info, find start of marks */
|
/* Skip info, find start of marks */
|
||||||
while (!(eof = viminfo_readline(&vir))
|
while (!(eof = viminfo_readline(&vir))
|
||||||
&& vir.vir_line[0] != '>')
|
&& vir.vir_line[0] != '>')
|
||||||
@@ -2079,7 +2083,7 @@ do_viminfo(fp_in, fp_out, flags)
|
|||||||
write_viminfo_search_pattern(fp_out);
|
write_viminfo_search_pattern(fp_out);
|
||||||
write_viminfo_sub_string(fp_out);
|
write_viminfo_sub_string(fp_out);
|
||||||
#ifdef FEAT_CMDHIST
|
#ifdef FEAT_CMDHIST
|
||||||
write_viminfo_history(fp_out);
|
write_viminfo_history(fp_out, merge);
|
||||||
#endif
|
#endif
|
||||||
write_viminfo_registers(fp_out);
|
write_viminfo_registers(fp_out);
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
|
@@ -6003,6 +6003,9 @@ ex_history(eap)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
|
#if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Buffers for history read from a viminfo file. Only valid while reading.
|
||||||
|
*/
|
||||||
static char_u **viminfo_history[HIST_COUNT] = {NULL, NULL, NULL, NULL};
|
static char_u **viminfo_history[HIST_COUNT] = {NULL, NULL, NULL, NULL};
|
||||||
static int viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0};
|
static int viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0};
|
||||||
static int viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0};
|
static int viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0};
|
||||||
@@ -6184,9 +6187,16 @@ finish_viminfo_history()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write history to viminfo file in "fp".
|
||||||
|
* When "merge" is TRUE merge history lines with a previously read viminfo
|
||||||
|
* file, data is in viminfo_history[].
|
||||||
|
* When "merge" is FALSE just write all history lines. Used for ":wviminfo!".
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
write_viminfo_history(fp)
|
write_viminfo_history(fp, merge)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
int merge;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int type;
|
int type;
|
||||||
@@ -6236,7 +6246,9 @@ write_viminfo_history(fp)
|
|||||||
p = round == 1 ? history[type][i].hisstr
|
p = round == 1 ? history[type][i].hisstr
|
||||||
: viminfo_history[type] == NULL ? NULL
|
: viminfo_history[type] == NULL ? NULL
|
||||||
: viminfo_history[type][i];
|
: viminfo_history[type][i];
|
||||||
if (p != NULL && (round == 2 || !history[type][i].viminfo))
|
if (p != NULL && (round == 2
|
||||||
|
|| !merge
|
||||||
|
|| !history[type][i].viminfo))
|
||||||
{
|
{
|
||||||
--num_saved;
|
--num_saved;
|
||||||
fputc(hist_type2char(type, TRUE), fp);
|
fputc(hist_type2char(type, TRUE), fp);
|
||||||
|
@@ -51,7 +51,7 @@ void ex_history __ARGS((exarg_T *eap));
|
|||||||
void prepare_viminfo_history __ARGS((int asklen, int writing));
|
void prepare_viminfo_history __ARGS((int asklen, int writing));
|
||||||
int read_viminfo_history __ARGS((vir_T *virp, int writing));
|
int read_viminfo_history __ARGS((vir_T *virp, int writing));
|
||||||
void finish_viminfo_history __ARGS((void));
|
void finish_viminfo_history __ARGS((void));
|
||||||
void write_viminfo_history __ARGS((FILE *fp));
|
void write_viminfo_history __ARGS((FILE *fp, int merge));
|
||||||
void cmd_pchar __ARGS((int c, int offset));
|
void cmd_pchar __ARGS((int c, int offset));
|
||||||
int cmd_gchar __ARGS((int offset));
|
int cmd_gchar __ARGS((int offset));
|
||||||
char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
|
char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
|
||||||
|
@@ -728,6 +728,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 */
|
||||||
|
/**/
|
||||||
|
1197,
|
||||||
/**/
|
/**/
|
||||||
1196,
|
1196,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user