0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

updated for version 7.0050

This commit is contained in:
Bram Moolenaar
2005-02-12 14:31:42 +00:00
parent 4399ef4764
commit 81bf708341
3 changed files with 261 additions and 87 deletions

View File

@@ -3250,32 +3250,57 @@ ex_append(eap)
char_u *theline;
int did_undo = FALSE;
linenr_T lnum = eap->line2;
int indent = 0;
char_u *p;
int vcol;
int empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
if (eap->cmdidx != CMD_append)
--lnum;
/* when the buffer is empty append to line 0 and delete the dummy line */
if (empty && lnum == 1)
lnum = 0;
State = INSERT; /* behave like in Insert mode */
if (curbuf->b_p_iminsert == B_IMODE_LMAP)
State |= LANGMAP;
while (1)
{
msg_scroll = TRUE;
need_wait_return = FALSE;
if (curbuf->b_p_ai && lnum > 0)
indent = get_indent_lnum(lnum);
if (eap->getline == NULL)
theline = getcmdline(
#ifdef FEAT_EVAL
eap->cstack->cs_looplevel > 0 ? -1 :
#endif
NUL, 0L, 0);
NUL, 0L, indent);
else
theline = eap->getline(
#ifdef FEAT_EVAL
eap->cstack->cs_looplevel > 0 ? -1 :
#endif
NUL, eap->cookie, 0);
NUL, eap->cookie, indent);
lines_left = Rows - 1;
if (theline == NULL || (theline[0] == '.' && theline[1] == NUL)
|| (!did_undo && u_save(lnum, lnum + 1) == FAIL))
if (theline == NULL)
break;
/* Look for the "." after automatic indent. */
vcol = 0;
for (p = theline; indent > vcol; ++p)
{
if (*p == ' ')
++vcol;
else if (*p == TAB)
vcol += 8 - vcol % 8;
else
break;
}
if ((p[0] == '.' && p[1] == NUL)
|| (!did_undo && u_save(lnum, lnum + 1) == FAIL))
{
vim_free(theline);
break;
@@ -3288,6 +3313,12 @@ ex_append(eap)
vim_free(theline);
++lnum;
msg_didout = TRUE; /* also scroll for empty line */
if (empty)
{
ml_delete(2L, FALSE);
empty = FALSE;
}
}
State = NORMAL;
@@ -3341,14 +3372,22 @@ ex_z(eap)
exarg_T *eap;
{
char_u *x;
int bigness = curwin->w_height - 3;
char_u kind;
int bigness;
char_u *kind;
int numbered = FALSE;
int minus = 0;
linenr_T start, end, curs, i;
int j;
linenr_T lnum = eap->line2;
/* Vi compatible: ":z!" uses display height, without a count uses
* 'scroll' */
if (eap->forceit)
bigness = curwin->w_height;
else if (firstwin == lastwin)
bigness = curwin->w_p_scr * 2;
else
bigness = curwin->w_height - 3;
if (bigness < 1)
bigness = 1;
@@ -3359,8 +3398,11 @@ ex_z(eap)
++x;
}
kind = *x;
if (kind == '-' || kind == '+' || kind == '=' || kind == '^' || kind == '.')
kind = x;
if (*kind == '-' || *kind == '+' || *kind == '='
|| *kind == '^' || *kind == '.')
++x;
while (*x == '-' || *x == '+')
++x;
if (*x != 0)
@@ -3371,15 +3413,23 @@ ex_z(eap)
return;
}
else
{
bigness = atoi((char *)x);
p_window = bigness;
}
}
switch (kind)
/* the number of '-' and '+' multiplies the distance */
if (*kind == '-' || *kind == '+')
for (x = kind + 1; *x == *kind; ++x)
;
switch (*kind)
{
case '-':
start = lnum - bigness;
end = lnum;
curs = lnum;
start = lnum - bigness * (x - kind);
end = start + bigness;
curs = end;
break;
case '=':
@@ -3403,7 +3453,9 @@ ex_z(eap)
default: /* '+' */
start = lnum;
end = lnum + bigness;
if (*kind == '+')
start += bigness * (x - kind - 1);
end = start + bigness;
curs = end;
break;
}
@@ -3526,15 +3578,15 @@ do_sub(eap)
int which_pat;
char_u *cmd;
int save_State;
linenr_T first_line = 0; /* first changed line */
linenr_T last_line= 0; /* below last changed line AFTER the
linenr_T first_line = 0; /* first changed line */
linenr_T last_line= 0; /* below last changed line AFTER the
* change */
linenr_T old_line_count = curbuf->b_ml.ml_line_count;
linenr_T line2;
long nmatch; /* number of lines in match */
linenr_T sub_firstlnum; /* nr of first sub line */
char_u *sub_firstline; /* allocated copy of first sub line */
int endcolumn; /* put cursor in last column when done */
long nmatch; /* number of lines in match */
linenr_T sub_firstlnum; /* nr of first sub line */
char_u *sub_firstline; /* allocated copy of first sub line */
int endcolumn = FALSE; /* cursor in last column when done */
cmd = eap->arg;
if (!global_busy)