diff -r -u -N --exclude='*.orig' vim72.orig/src/normal.c vim72/src/normal.c --- vim72.orig/src/normal.c 2008-07-31 13:03:08.000000000 -0700 +++ vim72/src/normal.c 2008-08-19 01:06:06.000000000 -0700 @@ -6402,6 +6402,7 @@ */ else if (cap->nchar == '[' || cap->nchar == ']') { + int both; if (cap->nchar == cap->cmdchar) /* "]]" or "[[" */ flag = '{'; else @@ -6412,9 +6413,14 @@ * 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 == '{'))) + if (curbuf->b_p_lisp) { + flag = '('; + both = FALSE; + } else { + both = (cap->oap->op_type != OP_NOP + && cap->arg == FORWARD && flag == '{'); + } + if (!findpar(&cap->oap->inclusive, cap->arg, cap->count1, flag, both)) clearopbeep(cap->oap); else { @@ -8155,6 +8161,7 @@ 0, 0)) { /* When '#' is in 'cpoptions' ignore the count. */ + if (!Unix2003_compat) /* vi_02.ex test 139 */ if (vim_strchr(p_cpo, CPO_HASH) != NULL) cap->count1 = 1; invoke_edit(cap, FALSE, cap->cmdchar, TRUE);