aboutsummaryrefslogtreecommitdiff
path: root/sam.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-01-13 18:56:48 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-01-13 19:24:21 +0100
commita1dc3da34b700adf2b2ad772ba2bf4e8fc38d4b9 (patch)
tree0e6fc54826439b3568ae8ec156624c41b6f1a83b /sam.c
parent53638e37fea793ce4bda93094b7103a716613181 (diff)
downloadvis-a1dc3da34b700adf2b2ad772ba2bf4e8fc38d4b9.tar.gz
vis-a1dc3da34b700adf2b2ad772ba2bf4e8fc38d4b9.tar.xz
sam: remove s (substitute) command use x (extract) and c (change) instead
They are roughly equivalent, instead of s/pattern/replacement/ to replace the first occurrence of pattern you can specify an address to the change command: /pattern/ c/replacement/ the only difference being that the first command is restricted to the current line. -+x/pattern/ c/replacement/ also restrictes matches to the current line, but performs the substitution on the whole line not only the first match. Currently it is not possible to only replace the n-th match as `s2/pattern/replacement/` would do in sam(1). A possible alternative syntax generalizing this concepts and applying it to the `x` and `g` commands will be investigated in the future. Global substitution as in %s/pattern/replacement/g can be performed using x/pattern/ c/replacement/
Diffstat (limited to 'sam.c')
-rw-r--r--sam.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/sam.c b/sam.c
index 3ddd146..af95c14 100644
--- a/sam.c
+++ b/sam.c
@@ -155,7 +155,7 @@ static const CommandDef cmds[] = {
"p", "Create selection covering range",
CMD_NONE, NULL, cmd_print
}, {
- "s", "Substitute text for regexp in range",
+ "s", "Substitute: use x/pattern/ c/replacement/ instead",
CMD_SHELL|CMD_ADDRESS_LINE, NULL, cmd_substitute
}, {
"v", "If range does not contain regexp, run command",
@@ -1391,13 +1391,8 @@ static bool cmd_files(Vis *vis, Win *win, Command *cmd, const char *argv[], Curs
}
static bool cmd_substitute(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
- Buffer buf;
- buffer_init(&buf);
- bool ret = false;
- if (buffer_put0(&buf, "s") && buffer_append0(&buf, argv[1]))
- ret = cmd_filter(vis, win, cmd, (const char*[]){ argv[0], "sed", buffer_move(&buf), NULL }, cur, range);
- buffer_release(&buf);
- return ret;
+ vis_info_show(vis, "Use :x/pattern/ c/replacement/ instead");
+ return false;
}
static bool cmd_write(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *r) {