diff --git a/lib/reline/unicode.rb b/lib/reline/unicode.rb index 09aff698b8..b7cecfeaee 100644 --- a/lib/reline/unicode.rb +++ b/lib/reline/unicode.rb @@ -459,7 +459,7 @@ class Reline::Unicode end def self.vi_forward_word(line, byte_pointer) - if (line.bytesize - 1) > byte_pointer + if line.bytesize > byte_pointer size = get_next_mbchar_size(line, byte_pointer) mbchar = line.byteslice(byte_pointer, size) if mbchar =~ /\w/ @@ -474,7 +474,7 @@ class Reline::Unicode else return [0, 0] end - while (line.bytesize - 1) > (byte_pointer + byte_size) + while line.bytesize > (byte_pointer + byte_size) size = get_next_mbchar_size(line, byte_pointer + byte_size) mbchar = line.byteslice(byte_pointer + byte_size, size) case started_by @@ -488,7 +488,7 @@ class Reline::Unicode width += get_mbchar_width(mbchar) byte_size += size end - while (line.bytesize - 1) > (byte_pointer + byte_size) + while line.bytesize > (byte_pointer + byte_size) size = get_next_mbchar_size(line, byte_pointer + byte_size) mbchar = line.byteslice(byte_pointer + byte_size, size) break if mbchar =~ /\S/ diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb index edef573619..45a5327763 100644 --- a/test/reline/test_key_actor_vi.rb +++ b/test/reline/test_key_actor_vi.rb @@ -1215,6 +1215,29 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase assert_line('aaa ddd eee') end + def test_vi_delete_meta_with_vi_next_word_at_eol + input_keys("foo bar\C-[0w") + assert_byte_pointer_size('foo ') + assert_cursor(4) + assert_cursor_max(7) + assert_line('foo bar') + input_keys('w') + assert_byte_pointer_size('foo ba') + assert_cursor(6) + assert_cursor_max(7) + assert_line('foo bar') + input_keys('0dw') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(3) + assert_line('bar') + input_keys('dw') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(0) + assert_line('') + end + def test_vi_delete_meta_with_vi_next_char input_keys("aaa bbb ccc ___ ddd\C-[02w") assert_byte_pointer_size('aaa bbb ')