1Index: src/normal.c
2===================================================================
3--- src/normal.c	(revision 57762)
4+++ src/normal.c	(working copy)
5@@ -6566,18 +6566,23 @@
6 	 * Imitate strange Vi behaviour: When using "]]" with an operator
7 	 * we also stop at '}'.
8 	 */
9-	if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, flag,
10-	      (cap->oap->op_type != OP_NOP
11-				      && cap->arg == FORWARD && flag == '{')))
12-	    clearopbeep(cap->oap);
13-	else
14-	{
15-	    if (cap->oap->op_type == OP_NOP)
16-		beginline(BL_WHITE | BL_FIX);
17+	if (curbuf->b_p_lisp) {
18+	    findpar(cap->oap, cap->arg, cap->count1, 
19+	      '(', FALSE);
20+	} else {
21+	    if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, flag,
22+		  (cap->oap->op_type != OP_NOP
23+					  && cap->arg == FORWARD && flag == '{')))
24+		clearopbeep(cap->oap);
25+	    else
26+	    {
27+		if (cap->oap->op_type == OP_NOP)
28+		    beginline(BL_WHITE | BL_FIX);
29 #ifdef FEAT_FOLDING
30-	    if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP)
31-		foldOpenCursor();
32+		if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP)
33+		    foldOpenCursor();
34 #endif
35+	    }
36 	}
37     }
38 
39@@ -6747,6 +6752,11 @@
40 nv_brace(cap)
41     cmdarg_T	*cap;
42 {
43+    if (curbuf->b_p_lisp) {
44+	cap->nchar = '(';
45+	nv_csearch(cap);
46+	return;
47+    }
48     cap->oap->motion_type = MCHAR;
49     cap->oap->use_reg_one = TRUE;
50     /* The motion used to be inclusive for "(", but that is not what Vi does. */
51Index: src/search.c
52===================================================================
53--- src/search.c	(revision 57762)
54+++ src/search.c	(working copy)
55@@ -2787,6 +2787,10 @@
56     char_u	*s;
57 
58     s = ml_get(lnum);
59+    if (para == '(')
60+	return *s == '(';
61+    if (para == ')')
62+	return *s == ')';
63     if (*s == para || *s == '\f' || (both && *s == '}'))
64 	return TRUE;
65     if (*s == '.' && (inmacro(p_sections, s + 1) ||
66