From a1dc3da34b700adf2b2ad772ba2bf4e8fc38d4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Fri, 13 Jan 2017 18:56:48 +0100 Subject: 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/ --- sam.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'sam.c') 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) { -- cgit v1.2.3