Mercurial > vim
diff src/ex_cmds.c @ 7664:1fded31d9e04 v7.4.1131
commit https://github.com/vim/vim/commit/b20e334859334be35de4b295023a2b49bdabbfa9
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Jan 18 23:29:01 2016 +0100
patch 7.4.1131
Problem: New lines in the viminfo file are dropped.
Solution: Copy lines starting with "|". Fix that when using :rviminfo in a
function global variables were restored as function-local
variables.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 18 Jan 2016 23:30:05 +0100 |
parents | ad432f8f68fb |
children | 20dc2763a3b9 |
line wrap: on
line diff
--- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1707,9 +1707,10 @@ append_redir(buf, buflen, opt, fname) (char *)opt, (char *)fname); } -#ifdef FEAT_VIMINFO +#if defined(FEAT_VIMINFO) || defined(PROTO) static int no_viminfo __ARGS((void)); +static void write_viminfo_barlines(vir_T *virp, FILE *fp_out); static int viminfo_errcnt; static int @@ -2123,6 +2124,7 @@ do_viminfo(fp_in, fp_out, flags) #ifdef FEAT_MBYTE vir.vir_conv.vc_type = CONV_NONE; #endif + ga_init2(&vir.vir_barlines, (int)sizeof(char_u *), 100); if (fp_in != NULL) { @@ -2159,6 +2161,7 @@ do_viminfo(fp_in, fp_out, flags) #endif write_viminfo_filemarks(fp_out); write_viminfo_bufferlist(fp_out); + write_viminfo_barlines(&vir, fp_out); count = write_viminfo_marks(fp_out); } if (fp_in != NULL @@ -2170,6 +2173,7 @@ do_viminfo(fp_in, fp_out, flags) if (vir.vir_conv.vc_type != CONV_NONE) convert_setup(&vir.vir_conv, NULL, NULL); #endif + ga_clear_strings(&vir.vir_barlines); } /* @@ -2196,7 +2200,6 @@ read_viminfo_up_to_marks(virp, forceit, { /* Characters reserved for future expansion, ignored now */ case '+': /* "+40 /path/dir file", for running vim without args */ - case '|': /* to be defined */ case '^': /* to be defined */ case '<': /* long line - ignored */ /* A comment or empty line. */ @@ -2206,6 +2209,11 @@ read_viminfo_up_to_marks(virp, forceit, case '#': eof = viminfo_readline(virp); break; + case '|': /* copy line (for future use) */ + if (writing) + ga_add_string(&virp->vir_barlines, virp->vir_line); + eof = viminfo_readline(virp); + break; case '*': /* "*encoding=value" */ eof = viminfo_encoding(virp); break; @@ -2427,6 +2435,21 @@ viminfo_writestring(fd, p) } putc('\n', fd); } + + static void +write_viminfo_barlines(vir_T *virp, FILE *fp_out) +{ + int i; + garray_T *gap = &virp->vir_barlines; + + if (gap->ga_len > 0) + { + fputs(_("\n# Bar lines, copied verbatim:\n"), fp_out); + + for (i = 0; i < gap->ga_len; ++i) + fputs(((char **)(gap->ga_data))[i], fp_out); + } +} #endif /* FEAT_VIMINFO */ /*