diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index f6cf0c5280..86d57d905b 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -735,7 +735,7 @@ class Reline::LineEditor not_insertion = method_symbol != :ed_insert process_insert(force: not_insertion) end - if @vi_arg + if @vi_arg and argumentable?(method_obj) method_obj.(key, arg: @vi_arg) else method_obj.(key) diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb index f5e542fbbe..a244927999 100644 --- a/test/reline/test_key_actor_vi.rb +++ b/test/reline/test_key_actor_vi.rb @@ -1228,6 +1228,19 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase assert_line('aaa bbb ___ ddd') end + def test_vi_delete_meta_with_arg + input_keys("aaa bbb ccc\C-[02w") + assert_byte_pointer_size('aaa bbb ') + assert_cursor(8) + assert_cursor_max(11) + assert_line('aaa bbb ccc') + input_keys('2dl') # TODO This should delete 2 chars. + assert_byte_pointer_size('aaa bbb ') + assert_cursor(8) + assert_cursor_max(10) + assert_line('aaa bbb cc') + end + def test_vi_change_meta input_keys("aaa bbb ccc ddd eee\C-[02w") assert_byte_pointer_size('aaa bbb ')