To: vim_dev@googlegroups.com Subject: Patch 8.2.3255 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3255 Problem: ci" finds following string but ci< and others don't. Solution: When not inside an object find the start. (Connor Lane Smit, closes #8670) Files: src/search.c, src/testdir/test_textobjects.vim, src/textobject.c *** ../vim-8.2.3254/src/search.c 2021-07-27 22:00:39.749712387 +0200 --- src/search.c 2021-07-31 13:25:20.207976900 +0200 *************** *** 2145,2150 **** --- 2145,2152 ---- else if (initc != '#' && initc != NUL) { find_mps_values(&initc, &findc, &backwards, TRUE); + if (dir) + backwards = (dir == FORWARD) ? FALSE : TRUE; if (findc == NUL) return NULL; } *** ../vim-8.2.3254/src/testdir/test_textobjects.vim 2020-10-15 21:23:25.163883137 +0200 --- src/testdir/test_textobjects.vim 2021-07-31 13:25:20.207976900 +0200 *************** *** 564,567 **** --- 564,599 ---- close! endfunc + " Test for i(, i<, etc. when cursor is in front of a block + func Test_textobj_find_paren_forward() + new + + " i< and a> when cursor is in front of a block + call setline(1, '#include ') + normal 0yi< + call assert_equal('foo.h', @") + normal 0ya> + call assert_equal('', @") + + " 2i(, 3i( in front of a block enters second/third nested '(' + call setline(1, 'foo (bar (baz (quux)))') + normal 0yi) + call assert_equal('bar (baz (quux))', @") + normal 02yi) + call assert_equal('baz (quux)', @") + normal 03yi) + call assert_equal('quux', @") + + " 3i( in front of a block doesn't enter third but un-nested '(' + call setline(1, 'foo (bar (baz) (quux))') + normal 03di) + call assert_equal('foo (bar (baz) (quux))', getline(1)) + normal 02di) + call assert_equal('foo (bar () (quux))', getline(1)) + normal 0di) + call assert_equal('foo ()', getline(1)) + + close! + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.3254/src/textobject.c 2020-10-15 21:23:25.163883137 +0200 --- src/textobject.c 2021-07-31 13:25:20.207976900 +0200 *************** *** 1079,1090 **** */ save_cpo = p_cpo; p_cpo = (char_u *)(vim_strchr(p_cpo, CPO_MATCHBSL) != NULL ? "%M" : "%"); ! while (count-- > 0) { ! if ((pos = findmatch(NULL, what)) == NULL) ! break; ! curwin->w_cursor = *pos; ! start_pos = *pos; // the findmatch for end_pos will overwrite *pos } p_cpo = save_cpo; --- 1079,1103 ---- */ save_cpo = p_cpo; p_cpo = (char_u *)(vim_strchr(p_cpo, CPO_MATCHBSL) != NULL ? "%M" : "%"); ! if ((pos = findmatch(NULL, what)) != NULL) { ! while (count-- > 0) ! { ! if ((pos = findmatch(NULL, what)) == NULL) ! break; ! curwin->w_cursor = *pos; ! start_pos = *pos; // the findmatch for end_pos will overwrite *pos ! } ! } ! else ! { ! while (count-- > 0) ! { ! if ((pos = findmatchlimit(NULL, what, FM_FORWARD, 0)) == NULL) ! break; ! curwin->w_cursor = *pos; ! start_pos = *pos; // the findmatch for end_pos will overwrite *pos ! } } p_cpo = save_cpo; *** ../vim-8.2.3254/src/version.c 2021-07-31 12:43:19.464837526 +0200 --- src/version.c 2021-07-31 13:28:55.303549433 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3255, /**/ -- Facepalm statement #9: "Did you see, there is now even a hobbit book" /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///