Index: src/normal.c =================================================================== --- src/normal.c (revision 57762) +++ src/normal.c (working copy) @@ -6566,18 +6566,23 @@ * Imitate strange Vi behaviour: When using "]]" with an operator * we also stop at '}'. */ - if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, flag, - (cap->oap->op_type != OP_NOP - && cap->arg == FORWARD && flag == '{'))) - clearopbeep(cap->oap); - else - { - if (cap->oap->op_type == OP_NOP) - beginline(BL_WHITE | BL_FIX); + if (curbuf->b_p_lisp) { + findpar(cap->oap, cap->arg, cap->count1, + '(', FALSE); + } else { + if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, flag, + (cap->oap->op_type != OP_NOP + && cap->arg == FORWARD && flag == '{'))) + clearopbeep(cap->oap); + else + { + if (cap->oap->op_type == OP_NOP) + beginline(BL_WHITE | BL_FIX); #ifdef FEAT_FOLDING - if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) - foldOpenCursor(); + if ((fdo_flags & FDO_BLOCK) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); #endif + } } } @@ -6747,6 +6752,11 @@ nv_brace(cap) cmdarg_T *cap; { + if (curbuf->b_p_lisp) { + cap->nchar = '('; + nv_csearch(cap); + return; + } cap->oap->motion_type = MCHAR; cap->oap->use_reg_one = TRUE; /* The motion used to be inclusive for "(", but that is not what Vi does. */ Index: src/search.c =================================================================== --- src/search.c (revision 57762) +++ src/search.c (working copy) @@ -2787,6 +2787,10 @@ char_u *s; s = ml_get(lnum); + if (para == '(') + return *s == '('; + if (para == ')') + return *s == ')'; if (*s == para || *s == '\f' || (both && *s == '}')) return TRUE; if (*s == '.' && (inmacro(p_sections, s + 1) ||