mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
updated for version 7.3.492
Problem: Can't indent conditions separately from function arguments. Solution: Add the 'k' flag in 'cino. (Lech Lorens)
This commit is contained in:
parent
98411e57ab
commit
3675fa09a7
@ -459,6 +459,22 @@ The examples below assume a 'shiftwidth' of 4.
|
||||
argument); argument);
|
||||
a_short_line(argument, a_short_line(argument,
|
||||
argument); argument);
|
||||
<
|
||||
*cino-k*
|
||||
kN When in unclosed parentheses which follow "if", "for" or
|
||||
"while" and N is non-zero, overrides the behaviour defined by
|
||||
"(N": causes the indent to be N characters relative to the outer
|
||||
context (i.e. the line where "if", "for" or "while" is). Has
|
||||
no effect on deeper levels of nesting. Affects flags like "wN"
|
||||
only for the "if", "for" and "while" conditions. If 0, defaults
|
||||
to behaviour defined by the "(N" flag. (default: 0).
|
||||
|
||||
cino=(0 cino=(0,ks >
|
||||
if (condition1 if (condition1
|
||||
&& condition2) && condition2)
|
||||
action(); action();
|
||||
function(argument1 function(argument1
|
||||
&& argument2); && argument2);
|
||||
<
|
||||
*cino-m*
|
||||
mN When N is non-zero, line up a line starting with a closing
|
||||
@ -530,14 +546,14 @@ The examples below assume a 'shiftwidth' of 4.
|
||||
|
||||
*cino-#*
|
||||
#N When N is non-zero recognize shell/Perl comments, starting with
|
||||
'#'. Default N is zero: don't recognizes '#' comments. Note
|
||||
'#'. Default N is zero: don't recognize '#' comments. Note
|
||||
that lines starting with # will still be seen as preprocessor
|
||||
lines.
|
||||
|
||||
|
||||
The defaults, spelled out in full, are:
|
||||
cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
|
||||
c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
|
||||
c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
|
||||
|
||||
Vim puts a line in column 1 if:
|
||||
- It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
|
||||
|
97
src/misc1.c
97
src/misc1.c
@ -5770,6 +5770,52 @@ cin_iswhileofdo(p, lnum, ind_maxparen) /* XXX */
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether in "p" there is an "if", "for" or "while" before offset.
|
||||
* Return 0 if there is none.
|
||||
* Otherwise return !0 and update "*poffset" to point to the place where the
|
||||
* string was found.
|
||||
*/
|
||||
static int
|
||||
cin_is_if_for_while_before_offset(line, offset, poffset)
|
||||
char_u *line;
|
||||
size_t offset;
|
||||
int *poffset;
|
||||
{
|
||||
|
||||
if (offset-- < 2)
|
||||
return 0;
|
||||
while (offset > 2 && vim_iswhite(line[offset]))
|
||||
--offset;
|
||||
|
||||
offset -= 1;
|
||||
if (!STRNCMP(line + offset, "if", 2))
|
||||
goto probablyFound;
|
||||
|
||||
if (offset >= 1)
|
||||
{
|
||||
offset -= 1;
|
||||
if (!STRNCMP(line + offset, "for", 3))
|
||||
goto probablyFound;
|
||||
|
||||
if (offset >= 2)
|
||||
{
|
||||
offset -= 2;
|
||||
if (!STRNCMP(line + offset, "while", 5))
|
||||
goto probablyFound;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
probablyFound:
|
||||
if (!offset || !vim_isIDc(line[offset - 1]))
|
||||
{
|
||||
*poffset = offset;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return TRUE if we are at the end of a do-while.
|
||||
* do
|
||||
@ -6124,7 +6170,7 @@ find_start_brace(ind_maxcomment) /* XXX */
|
||||
|
||||
/*
|
||||
* Find the matching '(', failing if it is in a comment.
|
||||
* Return NULL of no match found.
|
||||
* Return NULL if no match found.
|
||||
*/
|
||||
static pos_T *
|
||||
find_match_paren(ind_maxparen, ind_maxcomment) /* XXX */
|
||||
@ -6393,6 +6439,12 @@ get_c_indent()
|
||||
*/
|
||||
int ind_cpp_namespace = 0;
|
||||
|
||||
/*
|
||||
* handle continuation lines containing conditions of if(), for() and
|
||||
* while()
|
||||
*/
|
||||
int ind_if_for_while = 0;
|
||||
|
||||
pos_T cur_curpos;
|
||||
int amount;
|
||||
int scope_amount;
|
||||
@ -6437,6 +6489,7 @@ get_c_indent()
|
||||
int cont_amount = 0; /* amount for continuation line */
|
||||
int original_line_islabel;
|
||||
int added_to_amount = 0;
|
||||
int is_if_for_while = 0;
|
||||
|
||||
for (options = curbuf->b_p_cino; *options; )
|
||||
{
|
||||
@ -6509,6 +6562,7 @@ get_c_indent()
|
||||
case 'l': ind_keep_case_label = n; break;
|
||||
case '#': ind_hash_comment = n; break;
|
||||
case 'N': ind_cpp_namespace = n; break;
|
||||
case 'k': ind_if_for_while = n; break;
|
||||
}
|
||||
if (*options == ',')
|
||||
++options;
|
||||
@ -6812,6 +6866,35 @@ get_c_indent()
|
||||
if (amount == -1)
|
||||
{
|
||||
int ignore_paren_col = 0;
|
||||
int is_if_for_while = 0;
|
||||
|
||||
if (ind_if_for_while)
|
||||
{
|
||||
/* Look for the outermost opening parenthesis on this line
|
||||
* and check whether it belongs to an "if", "for" or "while". */
|
||||
|
||||
pos_T cursor_save = curwin->w_cursor;
|
||||
pos_T outermost;
|
||||
char_u *line;
|
||||
int look_col;
|
||||
|
||||
trypos = &our_paren_pos;
|
||||
do {
|
||||
outermost = *trypos;
|
||||
curwin->w_cursor.lnum = outermost.lnum;
|
||||
curwin->w_cursor.col = outermost.col;
|
||||
|
||||
trypos = find_match_paren(ind_maxparen, ind_maxcomment);
|
||||
} while (trypos && trypos->lnum == outermost.lnum);
|
||||
|
||||
curwin->w_cursor = cursor_save;
|
||||
|
||||
line = ml_get(outermost.lnum);
|
||||
|
||||
is_if_for_while =
|
||||
cin_is_if_for_while_before_offset(line, outermost.col,
|
||||
&outermost.col);
|
||||
}
|
||||
|
||||
amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
|
||||
look = skipwhite(look);
|
||||
@ -6836,7 +6919,7 @@ get_c_indent()
|
||||
curwin->w_cursor.lnum = save_lnum;
|
||||
look = ml_get(our_paren_pos.lnum) + look_col;
|
||||
}
|
||||
if (theline[0] == ')' || ind_unclosed == 0
|
||||
if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
|
||||
|| (!ind_unclosed_noignore && *look == '('
|
||||
&& ignore_paren_col == 0))
|
||||
{
|
||||
@ -6907,7 +6990,8 @@ get_c_indent()
|
||||
{
|
||||
/* Line up with the start of the matching paren line. */
|
||||
}
|
||||
else if (ind_unclosed == 0 || (!ind_unclosed_noignore
|
||||
else if ((ind_unclosed == 0 && is_if_for_while == 0)
|
||||
|| (!ind_unclosed_noignore
|
||||
&& *look == '(' && ignore_paren_col == 0))
|
||||
{
|
||||
if (cur_amount != MAXCOL)
|
||||
@ -6943,7 +7027,12 @@ get_c_indent()
|
||||
if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
|
||||
amount += ind_unclosed2;
|
||||
else
|
||||
amount += ind_unclosed;
|
||||
{
|
||||
if (is_if_for_while)
|
||||
amount += ind_if_for_while;
|
||||
else
|
||||
amount += ind_unclosed;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* For a line starting with ')' use the minimum of the two
|
||||
|
@ -1573,6 +1573,220 @@ void func(void)
|
||||
baz();
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,(0
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,(s
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,(s,U1
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
c = c1 &&
|
||||
(
|
||||
c2 ||
|
||||
c3
|
||||
) && c4;
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,(0,W4
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
|
||||
a_long_line(
|
||||
argument,
|
||||
argument);
|
||||
a_short_line(argument,
|
||||
argument);
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,u2
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2s,(0,w1
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=k2,(s
|
||||
2kdd3j=][
|
||||
ENDTEST
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
STARTTEST
|
||||
:set cino=N-s
|
||||
/^NAMESPACESTART
|
||||
|
@ -1411,6 +1411,192 @@ void func(void)
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
c = c1 &&
|
||||
(
|
||||
c2 ||
|
||||
c3
|
||||
) && c4;
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
|
||||
a_long_line(
|
||||
argument,
|
||||
argument);
|
||||
a_short_line(argument,
|
||||
argument);
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
if (c123456789
|
||||
&& (c22345
|
||||
|| c3))
|
||||
printf("foo\n");
|
||||
|
||||
if ( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
func( c1
|
||||
&& ( c2
|
||||
|| c3))
|
||||
foo;
|
||||
}
|
||||
|
||||
|
||||
void func(void)
|
||||
{
|
||||
if (condition1
|
||||
&& condition2)
|
||||
action();
|
||||
function(argument1
|
||||
&& argument2);
|
||||
|
||||
if (c1 && (c2 ||
|
||||
c3))
|
||||
foo;
|
||||
if (c1 &&
|
||||
(c2 || c3))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NAMESPACESTART
|
||||
/* valid namespaces with normal indent */
|
||||
namespace
|
||||
|
@ -714,6 +714,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
492,
|
||||
/**/
|
||||
491,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user