summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/normal.cc15
-rw-r--r--test/normal/split-multiple-lines/cmd1
-rw-r--r--test/normal/split-multiple-lines/in5
-rw-r--r--test/normal/split-multiple-lines/selections6
4 files changed, 22 insertions, 5 deletions
diff --git a/src/normal.cc b/src/normal.cc
index eb21ffb8..07b1b5b1 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -936,8 +936,9 @@ void split_regex(Context& context, NormalParams params)
});
}
-void split_lines(Context& context, NormalParams)
+void split_lines(Context& context, NormalParams params)
{
+ const LineCount count{params.count == 0 ? 1 : params.count};
auto& selections = context.selections();
auto& buffer = context.buffer();
Vector<Selection> res;
@@ -950,10 +951,14 @@ void split_lines(Context& context, NormalParams)
}
auto min = sel.min();
auto max = sel.max();
- res.push_back(keep_direction({min, {min.line, buffer[min.line].length()-1}}, sel));
- for (auto line = min.line+1; line < max.line; ++line)
- res.push_back(keep_direction({line, {line, buffer[line].length()-1}}, sel));
- res.push_back(keep_direction({max.line, max}, sel));
+ for (auto line = min.line; line <= max.line; line += count)
+ {
+ auto last_line = std::min(line + count - 1, buffer.line_count() - 1);
+ res.push_back(keep_direction({
+ std::max<BufferCoord>(min, line),
+ std::min<BufferCoord>(max, {last_line, buffer[last_line].length() - 1})
+ }, sel));
+ }
}
selections = std::move(res);
}
diff --git a/test/normal/split-multiple-lines/cmd b/test/normal/split-multiple-lines/cmd
new file mode 100644
index 00000000..f041eac0
--- /dev/null
+++ b/test/normal/split-multiple-lines/cmd
@@ -0,0 +1 @@
+%2<a-s>
diff --git a/test/normal/split-multiple-lines/in b/test/normal/split-multiple-lines/in
new file mode 100644
index 00000000..94c99a32
--- /dev/null
+++ b/test/normal/split-multiple-lines/in
@@ -0,0 +1,5 @@
+line 1
+line 2
+line 3
+line 4
+line 5
diff --git a/test/normal/split-multiple-lines/selections b/test/normal/split-multiple-lines/selections
new file mode 100644
index 00000000..4df657f3
--- /dev/null
+++ b/test/normal/split-multiple-lines/selections
@@ -0,0 +1,6 @@
+line 1
+line 2
+:line 3
+line 4
+:line 5
+