vim: Change line up and change line down respect indentation (#28934)
AidanV
created 8 months ago
When using 'c' with line-wise motions like j/k, operate like cc to fix
indentation issues.
Closes #28933
Release Notes:
- `c j` and `c k` now respect indentation
Change summary
crates/vim/src/normal/change.rs | 23 ++++++++++++++++++++++-
crates/vim/test_data/test_change_j.json | 4 ++++
crates/vim/test_data/test_change_k.json | 4 ++++
3 files changed, 30 insertions(+), 1 deletion(-)
Detailed changes
@@ -62,7 +62,10 @@ impl Vim {
&text_layout_details,
forced_motion,
);
- if let Motion::CurrentLine = motion {
+ if matches!(
+ motion,
+ Motion::CurrentLine | Motion::Down { .. } | Motion::Up { .. }
+ ) {
let mut start_offset =
selection.start.to_offset(map, Bias::Left);
let classifier = map
@@ -422,6 +425,15 @@ mod test {
)
.await
.assert_matches();
+ cx.simulate(
+ "c k",
+ indoc! {"
+ The quick
+ brown fox
+ ˇjumps over"},
+ )
+ .await
+ .assert_matches();
}
#[gpui::test]
@@ -463,6 +475,15 @@ mod test {
)
.await
.assert_matches();
+ cx.simulate(
+ "c j",
+ indoc! {"
+ The quick
+ ˇbrown fox
+ jumps over"},
+ )
+ .await
+ .assert_matches();
}
#[gpui::test]
@@ -14,3 +14,7 @@
{"Key":"c"}
{"Key":"j"}
{"Get":{"state":"The quick\nbrown fox\nˇ","mode":"Normal"}}
+{"Put":{"state":"The quick\n ˇbrown fox\n jumps over"}}
+{"Key":"c"}
+{"Key":"j"}
+{"Get":{"state":"The quick\n ˇ","mode":"Insert"}}
@@ -14,3 +14,7 @@
{"Key":"c"}
{"Key":"k"}
{"Get":{"state":"ˇ\nbrown fox\njumps over","mode":"Normal"}}
+{"Put":{"state":"The quick\n brown fox\n ˇjumps over"}}
+{"Key":"c"}
+{"Key":"k"}
+{"Get":{"state":"The quick\n ˇ","mode":"Insert"}}