diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index 597388368d..417916db4d 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -230,8 +230,8 @@ "ctrl-pageup": "pane::ActivatePrevItem", "insert": "vim::InsertBefore", // tree-sitter related commands - "[ x": "editor::SelectLargerSyntaxNode", - "] x": "editor::SelectSmallerSyntaxNode", + "[ x": "vim::SelectLargerSyntaxNode", + "] x": "vim::SelectSmallerSyntaxNode", "] d": "editor::GoToDiagnostic", "[ d": "editor::GoToPrevDiagnostic", "] c": "editor::GoToHunk", diff --git a/crates/vim/src/visual.rs b/crates/vim/src/visual.rs index 8d2b31a1de..b062d07ad9 100644 --- a/crates/vim/src/visual.rs +++ b/crates/vim/src/visual.rs @@ -36,6 +36,8 @@ actions!( SelectPrevious, SelectNextMatch, SelectPreviousMatch, + SelectSmallerSyntaxNode, + SelectLargerSyntaxNode, RestoreVisualSelection, VisualInsertEndOfLine, VisualInsertFirstNonWhiteSpace, @@ -74,6 +76,24 @@ pub fn register(editor: &mut Editor, cx: &mut ViewContext) { vim.select_match(Direction::Prev, cx); }); + Vim::action(editor, cx, |vim, _: &SelectLargerSyntaxNode, cx| { + let count = Vim::take_count(cx).unwrap_or(1); + for _ in 0..count { + vim.update_editor(cx, |_, editor, cx| { + editor.select_larger_syntax_node(&Default::default(), cx); + }); + } + }); + + Vim::action(editor, cx, |vim, _: &SelectSmallerSyntaxNode, cx| { + let count = Vim::take_count(cx).unwrap_or(1); + for _ in 0..count { + vim.update_editor(cx, |_, editor, cx| { + editor.select_smaller_syntax_node(&Default::default(), cx); + }); + } + }); + Vim::action(editor, cx, |vim, _: &RestoreVisualSelection, cx| { let Some((stored_mode, reversed)) = vim.stored_visual_mode.take() else { return;