Dear OpenBSD developers, On Aug 2 I reported this bug:
https://marc.info/?l=openbsd-bugs&m=169100763926909&w=2 After fiddling around I found a solution that works for both vi base and nvi from ports: https://marc.info/?l=openbsd-bugs&m=169269999218514&w=2 Since nobody answered me in bugs@ I sent a message to ports@ and Cc: Anthony J. Bentley who told me to contact Zhihao Yuan, nvi developer upstream. I don't use github, I don't have a github account, luckily after searching the web I found an email address of Zhihao. He understood the issue and answered me with what seems to be a more consistent patch: https://marc.info/?l=openbsd-bugs&m=169277277928008&w=2 Which, needless to say, also works for both. vi on base and nvi on ports. Below I paste a cvs version of Zhihao's patch to use it with vi on base. So it only rests some OpenBSD developer here to take look. It's not going to take up much of your time, everything has already been chewed up :-). Zhihao's diff translated to cvs: Index: vi/v_paragraph.c =================================================================== RCS file: /cvs/src/usr.bin/vi/vi/v_paragraph.c,v retrieving revision 1.9 diff -u -p -r1.9 v_paragraph.c --- vi/v_paragraph.c 18 Apr 2017 01:45:35 -0000 1.9 +++ vi/v_paragraph.c 23 Aug 2023 10:18:39 -0000 @@ -41,15 +41,20 @@ if (p[0] == '\014') { \ if (!--cnt) \ goto found; \ + if (pstate == P_INTEXT && !--cnt) \ + goto found; \ continue; \ } \ if (p[0] != '.' || len < 2) \ continue; \ for (lp = VIP(sp)->ps; *lp != '\0'; lp += 2) \ if (lp[0] == p[1] && \ - ((lp[1] == ' ' && len == 2) || lp[1] == p[2]) && \ - !--cnt) \ - goto found; \ + (lp[1] == ' ' && len == 2 || lp[1] == p[2])) { \ + if (!--cnt) \ + goto found; \ + if (pstate == P_INTEXT && !--cnt) \ + goto found; \ + } \ } /* -- Walter