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 ')