forked from aniani/vim
updated for version 7.4.232
Problem: ":%s/\n//" uses a lot of memory. (Aidan Marlin) Solution: Turn this into a join command. (Christian Brabandt)
This commit is contained in:
parent
efa304d760
commit
fd3fe98b78
@ -4420,6 +4420,31 @@ do_sub(eap)
|
|||||||
endcolumn = (curwin->w_curswant == MAXCOL);
|
endcolumn = (curwin->w_curswant == MAXCOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Recognize ":%s/\n//" and turn it into a join command, which is much
|
||||||
|
* more efficient.
|
||||||
|
* TODO: find a generic solution to make line-joining operations more
|
||||||
|
* efficient, avoid allocating a string that grows in size.
|
||||||
|
*/
|
||||||
|
if (STRCMP(pat, "\\n") == 0 && STRLEN(pat) == 2
|
||||||
|
&& *sub == NUL
|
||||||
|
&& (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
|
||||||
|
|| *cmd == 'p' || *cmd == '#'))))
|
||||||
|
{
|
||||||
|
curwin->w_cursor.lnum = eap->line1;
|
||||||
|
if (*cmd == 'l')
|
||||||
|
eap->flags = EXFLAG_LIST;
|
||||||
|
else if (*cmd == '#')
|
||||||
|
eap->flags = EXFLAG_NR;
|
||||||
|
else if (*cmd == 'p')
|
||||||
|
eap->flags = EXFLAG_PRINT;
|
||||||
|
|
||||||
|
(void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE);
|
||||||
|
sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
|
||||||
|
(void)do_sub_msg(FALSE);
|
||||||
|
ex_may_print(eap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find trailing options. When '&' is used, keep old options.
|
* Find trailing options. When '&' is used, keep old options.
|
||||||
*/
|
*/
|
||||||
|
@ -316,7 +316,6 @@ static void ex_winpos __ARGS((exarg_T *eap));
|
|||||||
static void ex_operators __ARGS((exarg_T *eap));
|
static void ex_operators __ARGS((exarg_T *eap));
|
||||||
static void ex_put __ARGS((exarg_T *eap));
|
static void ex_put __ARGS((exarg_T *eap));
|
||||||
static void ex_copymove __ARGS((exarg_T *eap));
|
static void ex_copymove __ARGS((exarg_T *eap));
|
||||||
static void ex_may_print __ARGS((exarg_T *eap));
|
|
||||||
static void ex_submagic __ARGS((exarg_T *eap));
|
static void ex_submagic __ARGS((exarg_T *eap));
|
||||||
static void ex_join __ARGS((exarg_T *eap));
|
static void ex_join __ARGS((exarg_T *eap));
|
||||||
static void ex_at __ARGS((exarg_T *eap));
|
static void ex_at __ARGS((exarg_T *eap));
|
||||||
@ -8683,7 +8682,7 @@ ex_copymove(eap)
|
|||||||
/*
|
/*
|
||||||
* Print the current line if flags were given to the Ex command.
|
* Print the current line if flags were given to the Ex command.
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
ex_may_print(eap)
|
ex_may_print(eap)
|
||||||
exarg_T *eap;
|
exarg_T *eap;
|
||||||
{
|
{
|
||||||
|
@ -54,4 +54,5 @@ int put_eol __ARGS((FILE *fd));
|
|||||||
int put_line __ARGS((FILE *fd, char *s));
|
int put_line __ARGS((FILE *fd, char *s));
|
||||||
void dialog_msg __ARGS((char_u *buff, char *format, char_u *fname));
|
void dialog_msg __ARGS((char_u *buff, char *format, char_u *fname));
|
||||||
char_u *get_behave_arg __ARGS((expand_T *xp, int idx));
|
char_u *get_behave_arg __ARGS((expand_T *xp, int idx));
|
||||||
|
void ex_may_print __ARGS((exarg_T *eap));
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
@ -734,6 +734,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 */
|
||||||
|
/**/
|
||||||
|
232,
|
||||||
/**/
|
/**/
|
||||||
231,
|
231,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user