tex: without arguments, :s repeats the previous substitution - neatvi - [fork] simple vi-type editor with UTF-8 support (HTM) git clone git://src.adamsgaard.dk/neatvi (DIR) Log (DIR) Files (DIR) Refs (DIR) README --- (DIR) commit 8d920bf3b193961749c1490708fd135167f74a59 (DIR) parent b4991eb46ce9f36f73591c62ef1cf20e4f915b7d (HTM) Author: Ali Gholami Rudi <ali@rudi.ir> Date: Sat, 13 Feb 2016 21:57:03 +0330 ex: without arguments, :s repeats the previous substitution Diffstat: M ex.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) --- (DIR) diff --git a/ex.c b/ex.c t@@ -20,6 +20,7 @@ int xdir = +1; /* current direction context */ int xshape = 1; /* perform letter shaping */ int xorder = 1; /* change the order of characters */ char xfindkwd[EXLEN]; /* the last searched keyword */ +char xfindrep[EXLEN]; /* the last replacement */ int xfinddir = +1; /* the last search direction */ static char *xkmap = "en"; /* the current keymap */ static char xkmap2[8] = "fa"; /* the alternate keymap */ t@@ -634,7 +635,7 @@ static int ec_substitute(char *ec) int offs[32]; int beg, end; char *pats[1]; - char *pat, *rep; + char *pat = NULL, *rep = NULL; char *s; int i; ex_loc(ec, loc); t@@ -642,10 +643,15 @@ static int ec_substitute(char *ec) return 1; s = ex_argeol(ec); pat = re_read(&s); - s--; - rep = re_read(&s); - if (pat[0]) + if (pat && pat[0]) snprintf(xfindkwd, sizeof(xfindkwd), "%s", pat); + if (pat && *s) { + s--; + rep = re_read(&s); + } + if (!rep) + rep = uc_dup(pat ? "" : xfindrep); + snprintf(xfindrep, sizeof(xfindrep), "%s", rep); free(pat); pats[0] = xfindkwd; re = rset_make(1, pats, xic ? RE_ICASE : 0); t@@ -742,7 +748,7 @@ static int ec_glob(char *ec) not = strchr(cmd, '!') || cmd[0] == 'v'; s = ex_argeol(ec); pat = re_read(&s); - if (pat[0]) + if (pat && pat[0]) snprintf(xfindkwd, sizeof(xfindkwd), "%s", pat); free(pat); pats[0] = xfindkwd;