From 16022e9c1a01dd0a95df7d4fdbe401caca53d9ff Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 22 Jun 2023 10:34:51 -0600 Subject: [PATCH] Add counts to subsitute (and all) Co-Authored-By: Nathan Sobo --- assets/keymaps/vim.json | 2 +- crates/vim/src/normal.rs | 2 +- crates/vim/src/test.rs | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index eb2d7ecf41..d08b6ddff9 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -131,7 +131,7 @@ } }, { - "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting", + "context": "Editor && vim_mode == normal && (vim_operator == none || vim_operator == n) && !VimWaiting", "bindings": { "c": [ "vim::PushOperator", diff --git a/crates/vim/src/normal.rs b/crates/vim/src/normal.rs index 19d000d397..ecec232104 100644 --- a/crates/vim/src/normal.rs +++ b/crates/vim/src/normal.rs @@ -484,7 +484,7 @@ pub fn substitute(vim: &mut Vim, count: usize, cx: &mut WindowContext) { let selections = editor.selections.all::(cx); for selection in selections.into_iter().rev() { let end = if selection.start == selection.end { - selection.start + Point::new(0, 1) + selection.start + Point::new(0, count as u32) } else { selection.end }; diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 293a4813e6..c7d944bd2a 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -117,4 +117,8 @@ async fn test_substitute(cx: &mut gpui::TestAppContext) { cx.set_state(indoc! {"a«bcˇ»deˇfg\n"}, Mode::Normal); cx.simulate_keystrokes(["s", "x"]); cx.assert_editor_state("axˇdexˇg\n"); + + cx.set_state(indoc! {"ˇabc\n"}, Mode::Normal); + cx.simulate_keystrokes(["2", "s", "x"]); + cx.assert_editor_state("xˇc\n"); }