diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-02-01 22:47:28 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-02-01 22:52:23 +0100 |
| commit | 90b5fdbcf78eee5cdb933c234d79a1aaa2bbf867 (patch) | |
| tree | 6f470d3bcbf6d9d289727689b6c7b419eb5b764d | |
| parent | 730374a1acefeac1c652209d8ae318139affcc36 (diff) | |
| download | vis-90b5fdbcf78eee5cdb933c234d79a1aaa2bbf867.tar.gz vis-90b5fdbcf78eee5cdb933c234d79a1aaa2bbf867.tar.xz | |
Improve cursor position after :substitute command
| -rw-r--r-- | vis-cmds.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -14,6 +14,7 @@ #include "vis-core.h" #include "text-util.h" #include "text-motions.h" +#include "text-objects.h" #include "util.h" enum CmdOpt { /* option flags for command definitions */ @@ -538,7 +539,7 @@ static bool cmd_read(Vis *vis, Filerange *range, enum CmdOpt opt, const char *ar static bool cmd_substitute(Vis *vis, Filerange *range, enum CmdOpt opt, const char *argv[]) { char pattern[255]; if (!text_range_valid(range)) - *range = (Filerange){ .start = 0, .end = text_size(vis->win->file->text) }; + *range = text_object_line(vis->win->file->text, view_cursor_get(vis->win->view)); snprintf(pattern, sizeof pattern, "s%s", argv[1]); return cmd_filter(vis, range, opt, (const char*[]){ argv[0], "sed", pattern, NULL}); } @@ -847,12 +848,11 @@ static bool cmd_filter(Vis *vis, Filerange *range, enum CmdOpt opt, const char * int status = vis_pipe(vis, &filter, range, argv, read_stdout, read_stderr); - if (range->start != EPOS) - view_cursor_to(view, range->start); - if (status == 0) { - if (text_range_valid(range)) + if (text_range_valid(range)) { text_delete_range(txt, range); + view_cursor_to(view, range->start); + } text_snapshot(txt); } else { /* make sure we have somehting to undo */ |
