diff --git a/tests/vimtests/blockvisual/0.test b/tests/vimtests/blockvisual/0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/0.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+1234
+1234
+1234
+-- Output
+(1,2)
+14
+14
+14
+-- Events
+l<C-v>ljjd
diff --git a/tests/vimtests/blockvisual/8.test b/tests/vimtests/blockvisual/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/8.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(2,2)
+ABCD
+AcD
+AbcD
+ABCD
+-- Events
+lj<C-v>jlgux
diff --git a/tests/vimtests/blockvisual/9.test b/tests/vimtests/blockvisual/9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/9.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+abcd
+abcd
+abcd
+abcd
+-- Output
+(2,3)
+abcd
+abD
+abCD
+abCD
+-- Events
+jjjlll<C-v>kkhgUx
diff --git a/tests/vimtests/blockvisual/block.test b/tests/vimtests/blockvisual/block.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/block.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(3,3)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Events
+jl<C-v>jl
diff --git a/tests/vimtests/blockvisual/block_d.test b/tests/vimtests/blockvisual/block_d.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/block_d.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(2,2)
+ABCD
+AD
+AD
+ABCD
+-- Events
+jl<C-v>jld
diff --git a/tests/vimtests/blockvisual/block_d_1.test b/tests/vimtests/blockvisual/block_d_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/block_d_1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,4)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(2,2)
+ABCD
+AD
+AD
+ABCD
+-- Events
+hj<C-v>jhd
diff --git a/tests/vimtests/blockvisual/block_d_2.test b/tests/vimtests/blockvisual/block_d_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/block_d_2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,4)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(1,1)
+A
+A
+A
+ABCD
+-- Events
+<C-v>2jhhd
diff --git a/tests/vimtests/blockvisual/capD_1.test b/tests/vimtests/blockvisual/capD_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/capD_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+f
+b
+-- Events
+l<C-v>jD
diff --git a/tests/vimtests/blockvisual/capD_2.test b/tests/vimtests/blockvisual/capD_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/capD_2.test
@@ -0,0 +1,20 @@
+-- Input
+(2,2)
+foo
+44444444
+bar
+
+baz
+xyzzy
+123123
+-- Output
+(2,1)
+foo
+4
+b
+
+b
+x
+123123
+-- Events
+<C-v>4jD
diff --git a/tests/vimtests/blockvisual/capI.test b/tests/vimtests/blockvisual/capI.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/capI.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,3)
+fo-o
+ba-r
+ba-z
+-- Events
+ll<C-v>jjI-<Esc>
diff --git a/tests/vimtests/blockvisual/capU_2.test b/tests/vimtests/blockvisual/capU_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/capU_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+FOo
+BAr
+BAz
+-- Events
+<C-v>ljjU
diff --git a/tests/vimtests/blockvisual/commentblock.test b/tests/vimtests/blockvisual/commentblock.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/commentblock.test
@@ -0,0 +1,20 @@
+-- Input
+(2,3)
+444
+  foo bar
+  baz xyzzy
+
+  abc
+  123
+  555
+-- Output
+(2,5)
+444
+  // foo bar
+  // baz xyzzy
+
+  // abc
+  123
+  555
+-- Events
+<C-v>3jI// <Esc>
diff --git a/tests/vimtests/blockvisual/commentblock_1.test b/tests/vimtests/blockvisual/commentblock_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/commentblock_1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,3)
+  foo bar
+  baz xyzzy
+  abc
+123
+-- Output
+(1,3)
+  @foo bar
+  @baz xyzzy
+  @abc
+12@3
+-- Events
+<C-v>3jI@<Esc>
diff --git a/tests/vimtests/blockvisual/commentblock_2.test b/tests/vimtests/blockvisual/commentblock_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/commentblock_2.test
@@ -0,0 +1,20 @@
+-- Input
+(2,3)
+444
+  foo bar
+  baz xyzzy
+
+  abc
+  123
+  555
+-- Output
+(2,5)
+444
+  // foo bar
+  // baz xyzzy
+
+  // abc
+  123
+  555
+-- Events
+<C-v>3jI// <Esc>
diff --git a/tests/vimtests/blockvisual/d.test b/tests/vimtests/blockvisual/d.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/d.test
@@ -0,0 +1,12 @@
+-- Input
+(1,17)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem  sit amet
+abc de
+qwe rty uiop
+-- Events
+<C-v>10hjd
diff --git a/tests/vimtests/blockvisual/d_1.test b/tests/vimtests/blockvisual/d_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/d_1.test
@@ -0,0 +1,14 @@
+-- Input
+(2,3)
+ABCD
+ABCD
+ABCD
+ABCD
+-- Output
+(2,2)
+ABCD
+AD
+AD
+ABCD
+-- Events
+<C-v>jhd
diff --git a/tests/vimtests/blockvisual/d_2.test b/tests/vimtests/blockvisual/d_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/d_2.test
@@ -0,0 +1,20 @@
+-- Input
+(2,1)
+444
+  foo bar
+  baz xyzzy
+
+  abc
+  123
+  555
+-- Output
+(2,1)
+444
+foo bar
+baz xyzzy
+
+abc
+  123
+  555
+-- Events
+<C-v>3jld
diff --git a/tests/vimtests/blockvisual/d_3.test b/tests/vimtests/blockvisual/d_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/d_3.test
@@ -0,0 +1,18 @@
+-- Input
+(2,1)
+foo
+
+
+
+
+bar
+-- Output
+(2,1)
+foo
+
+
+
+
+bar
+-- Events
+<C-v>3jd
diff --git a/tests/vimtests/blockvisual/d_4.test b/tests/vimtests/blockvisual/d_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/d_4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,6)
+xyzzy123
+foo
+barbaz90
+-- Output
+(1,6)
+xyzzy3
+foo
+barba0
+-- Events
+<C-v>jjld
diff --git a/tests/vimtests/blockvisual/hl.test b/tests/vimtests/blockvisual/hl.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/hl.test
@@ -0,0 +1,12 @@
+-- Input
+(1,17)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,7)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+<C-v>10hj
diff --git a/tests/vimtests/blockvisual/o_1.test b/tests/vimtests/blockvisual/o_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_1.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcd
+abcd
+abcd
+abcd
+-- Output
+(2,2)
+abcd
+abcd
+abcd
+abcd
+-- Events
+<C-v>jlo
diff --git a/tests/vimtests/blockvisual/o_2.test b/tests/vimtests/blockvisual/o_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_2.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcd
+abcd
+abcd
+abcd
+-- Output
+(2,3)
+abcd
+abcd
+abcd
+abcd
+-- Events
+<C-v>jloO
diff --git a/tests/vimtests/blockvisual/o_3.test b/tests/vimtests/blockvisual/o_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_3.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcd
+abcd
+abcd
+abcd
+-- Output
+(3,3)
+abcd
+abcd
+abcd
+abcd
+-- Events
+<C-v>jloo
diff --git a/tests/vimtests/blockvisual/o_4.test b/tests/vimtests/blockvisual/o_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_4.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcd
+abcd
+abcd
+abcd
+-- Output
+(3,2)
+abcd
+abcd
+abcd
+abcd
+-- Events
+<C-v>jlO
diff --git a/tests/vimtests/blockvisual/o_5.test b/tests/vimtests/blockvisual/o_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,17)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,2)
+Ldolor sit amet
+a
+qwe rty uiop
+-- Events
+<C-v>j2|Od
diff --git a/tests/vimtests/blockvisual/o_6.test b/tests/vimtests/blockvisual/o_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/o_6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,17)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem  dolor sit amet
+abc de
+qwe rty uiop
+-- Events
+<C-v>10hjOhd
diff --git a/tests/vimtests/blockvisual/paste_block.test b/tests/vimtests/blockvisual/paste_block.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/paste_block.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 foo
+456 bar
+789 baz
+-- Output
+(1,1)
+123 123
+456 456
+789 789
+-- Events
+<C-v>jjllygg0w<C-v>jjllpgg0
diff --git a/tests/vimtests/blockvisual/r_1.test b/tests/vimtests/blockvisual/r_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/r_1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,3)
+  foo bar
+  baz xyzzy
+  abc
+123
+-- Output
+(1,3)
+  xoo bar
+  xaz xyzzy
+  xbc
+12x
+-- Events
+<C-v>3jrx
diff --git a/tests/vimtests/blockvisual/r_2.test b/tests/vimtests/blockvisual/r_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/r_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+1234
+1234
+-- Output
+(1,2)
+1xx4
+1xx4
+-- Events
+l<C-v>ljrx
diff --git a/tests/vimtests/blockvisual/r_3.test b/tests/vimtests/blockvisual/r_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/r_3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,2)
+fxx
+bxx
+baz
+-- Events
+l<C-v>ljrx
diff --git a/tests/vimtests/blockvisual/switchcase_2.test b/tests/vimtests/blockvisual/switchcase_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/switchcase_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+FOo
+BAr
+-- Events
+<C-v>jl~
diff --git a/tests/vimtests/blockvisual/u_2.test b/tests/vimtests/blockvisual/u_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/u_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+FOO
+BAR
+BAZ
+-- Output
+(1,1)
+foO
+baR
+baZ
+-- Events
+<C-v>ljju
diff --git a/tests/vimtests/blockvisual/y_10.test b/tests/vimtests/blockvisual/y_10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_10.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+1234
+abcd
+ABCD
+XYZW
+-- Output
+(2,2)
+1234
+abcdbcd
+ABCD
+XYZW
+-- Events
+<C-v>llyP
diff --git a/tests/vimtests/blockvisual/y_11.test b/tests/vimtests/blockvisual/y_11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_11.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcdef
+abcdef
+abcdef
+abcdef
+-- Output
+(2,2)
+abcdef
+a    bcdef
+a    bcdef
+a    bcdef
+-- Events
+<C-v>jj>
diff --git a/tests/vimtests/blockvisual/y_12.test b/tests/vimtests/blockvisual/y_12.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_12.test
@@ -0,0 +1,15 @@
+-- Input
+(2,2)
+abcdef
+abcdef
+abcdef
+abcdef
+-- Output
+(3,3)
+abcdef
+abcdef
+abbcdcdef
+abbcdcdef
+  bcd
+-- Events
+<C-v>lljjyjp
diff --git a/tests/vimtests/blockvisual/y_13.test b/tests/vimtests/blockvisual/y_13.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_13.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcdef
+a bcdef
+a bcdef
+abcdef
+-- Output
+(2,2)
+abcdef
+a     bcdef
+a     bcdef
+a    bcdef
+-- Events
+<C-v>jj>
diff --git a/tests/vimtests/blockvisual/y_14.test b/tests/vimtests/blockvisual/y_14.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_14.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcdef
+a    bcdef
+a    bcdef
+a    bcdef
+-- Output
+(2,2)
+abcdef
+abcdef
+abcdef
+abcdef
+-- Events
+<C-v>jj<lt>
diff --git a/tests/vimtests/blockvisual/y_15.test b/tests/vimtests/blockvisual/y_15.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_15.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+abcdef
+a      bcdef
+a      bcdef
+a      bcdef
+-- Output
+(2,2)
+abcdef
+a  bcdef
+a  bcdef
+a  bcdef
+-- Events
+<C-v>jj<lt>
diff --git a/tests/vimtests/blockvisual/y_3.test b/tests/vimtests/blockvisual/y_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_3.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+12
+12
+-- Output
+(1,2)
+112
+112
+-- Events
+<C-v>jyp
diff --git a/tests/vimtests/blockvisual/y_4.test b/tests/vimtests/blockvisual/y_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_4.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+1234
+abcd
+ABCD
+XYZW
+-- Output
+(2,3)
+1234
+abbccd
+ABBCCD
+XYZW
+-- Events
+lj<C-v>ljyp
diff --git a/tests/vimtests/blockvisual/y_7.test b/tests/vimtests/blockvisual/y_7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_7.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+1234
+abcd
+ABCD
+XYZW
+-- Output
+(2,2)
+1234
+abcbcd
+ABCBCD
+XYZW
+-- Events
+lj<C-v>ljyP
diff --git a/tests/vimtests/blockvisual/y_8.test b/tests/vimtests/blockvisual/y_8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_8.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+1234
+abcd
+ABCD
+XYZW
+-- Output
+(1,5)
+12344
+abcdd
+ABCDD
+XYZW
+-- Events
+$<C-v>jjyp
diff --git a/tests/vimtests/blockvisual/y_9.test b/tests/vimtests/blockvisual/y_9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/blockvisual/y_9.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+1234
+abcd
+ABCD
+XYZW
+-- Output
+(2,2)
+1234
+abcdbcd
+ABCD
+XYZW
+-- Events
+<C-v>llllllllyP
diff --git a/tests/vimtests/change/C_part_of_line.test b/tests/vimtests/change/C_part_of_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/C_part_of_line.test
@@ -0,0 +1,12 @@
+-- Input
+(1,9)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,11)
+Lorem ipman
+abc def ghi
+qwe rty uiop
+-- Events
+Cman<Esc>
diff --git a/tests/vimtests/change/C_whole_line.test b/tests/vimtests/change/C_whole_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/C_whole_line.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,3)
+man
+abc def ghi
+qwe rty uiop
+-- Events
+Cman<Esc>
diff --git a/tests/vimtests/change/S.test b/tests/vimtests/change/S.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/S.test
@@ -0,0 +1,12 @@
+-- Input
+(1,11)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,3)
+man
+abc def ghi
+qwe rty uiop
+-- Events
+Sman<Esc>
diff --git a/tests/vimtests/change/V3jc.test b/tests/vimtests/change/V3jc.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/V3jc.test
@@ -0,0 +1,15 @@
+-- Input
+(2,3)
+aaaaaa
+bbbbbb
+cccccc
+dddddd
+eeeeee
+ffffff
+-- Output
+(2,1)
+aaaaaa
+
+ffffff
+-- Events
+V3jc<Esc>
diff --git a/tests/vimtests/change/c3l.test b/tests/vimtests/change/c3l.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/c3l.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,11)
+xem ipsum xor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+c3lx<Esc>ww.
diff --git a/tests/vimtests/change/cc.test b/tests/vimtests/change/cc.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/cc.test
@@ -0,0 +1,12 @@
+-- Input
+(1,11)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,3)
+man
+abc def ghi
+qwe rty uiop
+-- Events
+ccman<Esc>
diff --git a/tests/vimtests/change/ciw.test b/tests/vimtests/change/ciw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/ciw.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,3)
+foo ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ciwfoo<Esc>
diff --git a/tests/vimtests/change/s_eol.test b/tests/vimtests/change/s_eol.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/change/s_eol.test
@@ -0,0 +1,12 @@
+-- Input
+(1,11)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,26)
+Lorem ipsum dolor sit amex
+abc def ghi
+qwe rty uiop
+-- Events
+$sx<Esc>
diff --git a/tests/vimtests/delete/10dd.test b/tests/vimtests/delete/10dd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/10dd.test
@@ -0,0 +1,10 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet
+-- Events
+10dd
diff --git a/tests/vimtests/delete/2d3w.test b/tests/vimtests/delete/2d3w.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2d3w.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+a b c d e f g h
+-- Output
+(1,1)
+g h
+-- Events
+2d3w
diff --git a/tests/vimtests/delete/2d3w_1.test b/tests/vimtests/delete/2d3w_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2d3w_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+a b c d e f g h
+a b c d e f g h
+-- Output
+(2,1)
+g h
+e f g h
+-- Events
+2d3wj4.
diff --git a/tests/vimtests/delete/2dd.test b/tests/vimtests/delete/2dd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2dd.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+qwe rty uiop
+-- Events
+2dd
diff --git a/tests/vimtests/delete/2dw..test b/tests/vimtests/delete/2dw..test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2dw..test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+a b c d e f g h i j
+a b c d e f g h i j
+a b c d e f g h i j
+-- Output
+(2,1)
+a b c d e f g h i j
+e f g h i j
+a b c d e f g h i j
+-- Events
+2dw.
diff --git a/tests/vimtests/delete/2dw2..test b/tests/vimtests/delete/2dw2..test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2dw2..test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+a b c d e f g h i j
+a b c d e f g h i j
+a b c d e f g h i j
+-- Output
+(2,1)
+a b c d e f g h i j
+e f g h i j
+a b c d e f g h i j
+-- Events
+2dw2.
diff --git a/tests/vimtests/delete/2dw3..test b/tests/vimtests/delete/2dw3..test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/2dw3..test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+a b c d e f g h i j
+a b c d e f g h i j
+a b c d e f g h i j
+-- Output
+(2,1)
+a b c d e f g h i j
+f g h i j
+a b c d e f g h i j
+-- Events
+2dw3.
diff --git a/tests/vimtests/delete/C-u_1.test b/tests/vimtests/delete/C-u_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/C-u_1.test
@@ -0,0 +1,10 @@
+-- Input
+(2,5)
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+rty uiop
+-- Events
+i<C-u>
diff --git a/tests/vimtests/delete/C-u_2.test b/tests/vimtests/delete/C-u_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/C-u_2.test
@@ -0,0 +1,9 @@
+-- Input
+(2,1)
+foo bar
+baz
+-- Output
+(1,8)
+foo barbaz
+-- Events
+i<C-u>
diff --git a/tests/vimtests/delete/capD.test b/tests/vimtests/delete/capD.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/capD.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+ foo
+ bar
+ baz
+-- Output
+(2,2)
+ foo
+ b
+ baz
+-- Events
+jllD
diff --git a/tests/vimtests/delete/capX.test b/tests/vimtests/delete/capX.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/capX.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+A very intelligent turtle
+Found programming UNIX a hurdle
+-- Output
+(2,11)
+A very intelligent turtle
+Found progng UNIX a hurdle
+-- Events
+15lj3XXX
diff --git a/tests/vimtests/delete/capX_1.test b/tests/vimtests/delete/capX_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/capX_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,1)
+foo
+ar
+baz
+-- Events
+5X
diff --git a/tests/vimtests/delete/d0.test b/tests/vimtests/delete/d0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d0.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+abc def ghi
+123 456 789
+lorem ipsum
+-- Output
+(1,1)
+bc def ghi
+123 456 789
+lorem ipsum
+-- Events
+dl
diff --git a/tests/vimtests/delete/d00.test b/tests/vimtests/delete/d00.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d00.test
@@ -0,0 +1,12 @@
+-- Input
+(1,6)
+abc def ghi
+123 456 789
+lorem ipsum
+-- Output
+(1,1)
+ef ghi
+123 456 789
+lorem ipsum
+-- Events
+d0
diff --git a/tests/vimtests/delete/d2G.test b/tests/vimtests/delete/d2G.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d2G.test
@@ -0,0 +1,12 @@
+-- Input
+(3,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+aze rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+aze rty uiop
+-- Events
+d2G
diff --git a/tests/vimtests/delete/d2vd.test b/tests/vimtests/delete/d2vd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d2vd.test
@@ -0,0 +1,12 @@
+-- Input
+(2,8)
+Lorem ipsum dolor sit amet
+   abc def ghi
+qwe rty uiop
+-- Output
+(2,7)
+Lorem ipsum dolor sit amet
+   abc 
+qwe rty uiop
+-- Events
+d2vd
diff --git a/tests/vimtests/delete/d2vd_1.test b/tests/vimtests/delete/d2vd_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d2vd_1.test
@@ -0,0 +1,11 @@
+-- Input
+(2,8)
+Lorem ipsum dolor sit amet
+   abc def ghi
+    qwe rty uiop
+-- Output
+(2,8)
+Lorem ipsum dolor sit amet
+   abc qwe rty uiop
+-- Events
+d2vd
diff --git a/tests/vimtests/delete/d3G.test b/tests/vimtests/delete/d3G.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d3G.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+aze rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+aze rty uiop
+-- Events
+d3G
diff --git a/tests/vimtests/delete/d3vd.test b/tests/vimtests/delete/d3vd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d3vd.test
@@ -0,0 +1,12 @@
+-- Input
+(2,8)
+Lorem ipsum dolor sit amet
+   abc def ghi
+    qwe rty uiop
+    qwe rty uiop
+-- Output
+(2,8)
+Lorem ipsum dolor sit amet
+   abc qwe rty uiop
+-- Events
+d3vd
diff --git a/tests/vimtests/delete/dVl.test b/tests/vimtests/delete/dVl.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dVl.test
@@ -0,0 +1,11 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Events
+dVl
diff --git a/tests/vimtests/delete/d_capG.test b/tests/vimtests/delete/d_capG.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d_capG.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+aze rty uiop
+-- Output
+(1,1)
+
+-- Events
+dG
diff --git a/tests/vimtests/delete/d_capV_right_curly.test b/tests/vimtests/delete/d_capV_right_curly.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d_capV_right_curly.test
@@ -0,0 +1,10 @@
+-- Input
+(1,5)
+Foo bar baz
+
+123 234 345
+-- Output
+(1,1)
+123 234 345
+-- Events
+dV}
diff --git a/tests/vimtests/delete/d_right_curly.test b/tests/vimtests/delete/d_right_curly.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d_right_curly.test
@@ -0,0 +1,12 @@
+-- Input
+(1,5)
+Foo bar baz
+
+123 234 345
+-- Output
+(1,4)
+Foo 
+
+123 234 345
+-- Events
+d}
diff --git a/tests/vimtests/delete/d_v_right_curly.test b/tests/vimtests/delete/d_v_right_curly.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/d_v_right_curly.test
@@ -0,0 +1,10 @@
+-- Input
+(1,5)
+Foo bar baz
+
+123 234 345
+-- Output
+(1,5)
+Foo 123 234 345
+-- Events
+dv}
diff --git a/tests/vimtests/delete/daw.test b/tests/vimtests/delete/daw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/daw.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+daw
diff --git a/tests/vimtests/delete/dd.test b/tests/vimtests/delete/dd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Events
+jdd
diff --git a/tests/vimtests/delete/dd_1.test b/tests/vimtests/delete/dd_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd_1.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Events
+j$dd
diff --git a/tests/vimtests/delete/dd_2.test b/tests/vimtests/delete/dd_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+qwe rty uiop
+-- Events
+$2dd
diff --git a/tests/vimtests/delete/dd_3.test b/tests/vimtests/delete/dd_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd_3.test
@@ -0,0 +1,11 @@
+-- Input
+(3,3)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+-- Events
+dd
diff --git a/tests/vimtests/delete/dd_4.test b/tests/vimtests/delete/dd_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd_4.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+ 
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+ 
+-- Events
+2dd
diff --git a/tests/vimtests/delete/dd_5.test b/tests/vimtests/delete/dd_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dd_5.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+
+
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+
+
+-- Events
+2dd
diff --git a/tests/vimtests/delete/de.test b/tests/vimtests/delete/de.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/de.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+de
diff --git a/tests/vimtests/delete/diw.test b/tests/vimtests/delete/diw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/diw.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+diw
diff --git a/tests/vimtests/delete/dj.test b/tests/vimtests/delete/dj.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dj.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+qwe rty uiop
+-- Events
+dj
diff --git a/tests/vimtests/delete/dt.test b/tests/vimtests/delete/dt.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dt.test
@@ -0,0 +1,12 @@
+-- Input
+(2,10)
+Lorem ipsum dolor sit amet
+[peanut butter and jelly]
+qwe rty uiop
+-- Output
+(2,10)
+Lorem ipsum dolor sit amet
+[peanut b]
+qwe rty uiop
+-- Events
+dt]
diff --git a/tests/vimtests/delete/dvd.test b/tests/vimtests/delete/dvd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dvd.test
@@ -0,0 +1,12 @@
+-- Input
+(2,8)
+Lorem ipsum dolor sit amet
+   abc def ghi
+qwe rty uiop
+-- Output
+(2,4)
+Lorem ipsum dolor sit amet
+   def ghi
+qwe rty uiop
+-- Events
+dvd
diff --git a/tests/vimtests/delete/dve.test b/tests/vimtests/delete/dve.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dve.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+Foo bar baz
+-- Output
+(1,1)
+o bar baz
+-- Events
+dve
diff --git a/tests/vimtests/delete/dw_1.test b/tests/vimtests/delete/dw_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/dw_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dw..
diff --git a/tests/vimtests/delete/ld3w.test b/tests/vimtests/delete/ld3w.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/ld3w.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+1 2 3
+4 5 6
+-- Output
+(1,1)
+1
+4 5 6
+-- Events
+ld3w
diff --git a/tests/vimtests/delete/ld3w_1.test b/tests/vimtests/delete/ld3w_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/ld3w_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+1 2 3 4 5 6
+-- Output
+(1,2)
+14 5 6
+-- Events
+ld3w
diff --git a/tests/vimtests/delete/ldw.test b/tests/vimtests/delete/ldw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/ldw.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+1 2 3
+4 5 6
+-- Output
+(1,2)
+12 3
+4 5 6
+-- Events
+ldw
diff --git a/tests/vimtests/delete/ldwdw.test b/tests/vimtests/delete/ldwdw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/ldwdw.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+1 2 3
+4 5 6
+-- Output
+(1,2)
+13
+4 5 6
+-- Events
+ldwdw
diff --git a/tests/vimtests/delete/spec_delete.test b/tests/vimtests/delete/spec_delete.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/spec_delete.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+br
+baz
+-- Events
+<Del>
diff --git a/tests/vimtests/delete/x.test b/tests/vimtests/delete/x.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/x.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+A very intelligent turtle
+Found programming UNIX a hurdle
+-- Output
+(2,4)
+A very intelligent turtle
+Foumming UNIX a hurdle
+-- Events
+3lj5xxxxx
diff --git a/tests/vimtests/delete/x_1.test b/tests/vimtests/delete/x_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/delete/x_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,1)
+foo
+b
+baz
+-- Events
+5x
diff --git a/tests/vimtests/digraphs/ae.test b/tests/vimtests/digraphs/ae.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/digraphs/ae.test
@@ -0,0 +1,8 @@
+-- Input
+(1,5)
+abcdf
+-- Output
+(1,5)
+abcdæf
+-- Events
+i<C-k>ae<Esc>
diff --git a/tests/vimtests/digraphs/eacute.test b/tests/vimtests/digraphs/eacute.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/digraphs/eacute.test
@@ -0,0 +1,8 @@
+-- Input
+(1,5)
+abcdf
+-- Output
+(1,5)
+abcdéf
+-- Events
+i<C-k>'e<Esc>
diff --git a/tests/vimtests/empty/empty.test b/tests/vimtests/empty/empty.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/empty/empty.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+
+
+
+
+-- Output
+(1,1)
+
+
+
+
+-- Events
diff --git a/tests/vimtests/ex/empty.test b/tests/vimtests/ex/empty.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/ex/empty.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,1)
+
+-- Events
+:<CR>:<CR>:<CR>
diff --git a/tests/vimtests/ex/esc.test b/tests/vimtests/ex/esc.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/ex/esc.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+bar
+baz
+-- Events
+ll:<Esc>hj
diff --git a/tests/vimtests/ex/esc_1.test b/tests/vimtests/ex/esc_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/ex/esc_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+bar
+baz
+-- Events
+ll:blah<Esc>hj
diff --git a/tests/vimtests/ex/fail.test b/tests/vimtests/ex/fail.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/ex/fail.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+bar
+baz
+-- Events
+ll:blah<CR>hj
diff --git a/tests/vimtests/find/f.test b/tests/vimtests/find/f.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+fi
diff --git a/tests/vimtests/find/f1.test b/tests/vimtests/find/f1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,20)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2fi
diff --git a/tests/vimtests/find/f2.test b/tests/vimtests/find/f2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,20)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+fi;
diff --git a/tests/vimtests/find/f3.test b/tests/vimtests/find/f3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+fi;,
diff --git a/tests/vimtests/find/f4.test b/tests/vimtests/find/f4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+fh
diff --git a/tests/vimtests/find/f5.test b/tests/vimtests/find/f5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor s<t amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,20)
+Lorem ipsum dolor s<t amet
+abc def ghi
+qwe rty uiop
+-- Events
+f<lt>
diff --git a/tests/vimtests/find/f6.test b/tests/vimtests/find/f6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/f6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Foo ii Bar
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+Foo ii Bar
+abc def ghi
+qwe rty uiop
+-- Events
+2fi
diff --git a/tests/vimtests/find/t.test b/tests/vimtests/find/t.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ti
diff --git a/tests/vimtests/find/t1.test b/tests/vimtests/find/t1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,19)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2ti
diff --git a/tests/vimtests/find/t2.test b/tests/vimtests/find/t2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,19)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+til;
diff --git a/tests/vimtests/find/t3.test b/tests/vimtests/find/t3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+fi;,
diff --git a/tests/vimtests/find/t4.test b/tests/vimtests/find/t4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+th
diff --git a/tests/vimtests/find/t5.test b/tests/vimtests/find/t5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ti;
diff --git a/tests/vimtests/find/t6.test b/tests/vimtests/find/t6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+to2;
diff --git a/tests/vimtests/find/t7.test b/tests/vimtests/find/t7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/find/t7.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Foo ii bar
+abc def ghi
+qwe rty uiop
+-- Output
+(1,5)
+Foo ii bar
+abc def ghi
+qwe rty uiop
+-- Events
+2ti
diff --git a/tests/vimtests/format/break_line_in_word.test b/tests/vimtests/format/break_line_in_word.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/break_line_in_word.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua.
+-- Events
+gqip
diff --git a/tests/vimtests/format/indent.test b/tests/vimtests/format/indent.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/indent.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.  Donec a diam lectus.
+-- Output
+(2,5)
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.  Donec a diam
+    lectus.
+-- Events
+gqip
diff --git a/tests/vimtests/format/join_lines.test b/tests/vimtests/format/join_lines.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/join_lines.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet, consectetur
+adipiscing elit. Donec a diam lectus.
+Sed sit amet ipsum mauris. Maecenas congue
+ligula ac quam viverra nec consectetur
+ante hendrerit.
+-- Output
+(3,1)
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
+Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
+consectetur ante hendrerit.
+-- Events
+gqip
diff --git a/tests/vimtests/format/long_blank_line.test b/tests/vimtests/format/long_blank_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/long_blank_line.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+                                                                                                    
+the above line is 100 spaces
+-- Output
+(1,1)
+the above line is 100 spaces
+-- Events
+gqip
diff --git a/tests/vimtests/format/long_line.test b/tests/vimtests/format/long_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/long_line.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+Loremipsumdolorsitamet,consecteturadipiscingelit.Donecadiamlectus.Sedsitametipsummauris.
+-- Output
+(1,1)
+Loremipsumdolorsitamet,consecteturadipiscingelit.Donecadiamlectus.Sedsitametipsummauris.
+-- Events
+gqip
diff --git a/tests/vimtests/format/trailing_ws.test b/tests/vimtests/format/trailing_ws.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/format/trailing_ws.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod            
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+-- Events
+gqip
diff --git a/tests/vimtests/indent/1.test b/tests/vimtests/indent/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+123
+-- Output
+(2,5)
+foo
+    bar
+    baz
+123
+-- Events
+j>j
diff --git a/tests/vimtests/indent/2.test b/tests/vimtests/indent/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+123
+-- Output
+(2,5)
+foo
+    bar
+baz
+123
+-- Events
+j>>
diff --git a/tests/vimtests/indent/3.test b/tests/vimtests/indent/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/3.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+123
+-- Output
+(2,5)
+foo
+    bar
+    baz
+123
+-- Events
+j2>>
diff --git a/tests/vimtests/indent/4.test b/tests/vimtests/indent/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/4.test
@@ -0,0 +1,14 @@
+-- Input
+(2,5)
+foo
+    bar
+baz
+123
+-- Output
+(2,1)
+foo
+bar
+baz
+123
+-- Events
+<lt><lt>
diff --git a/tests/vimtests/indent/5.test b/tests/vimtests/indent/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/5.test
@@ -0,0 +1,14 @@
+-- Input
+(2,5)
+foo
+    bar
+    baz
+    123
+-- Output
+(2,1)
+foo
+bar
+baz
+    123
+-- Events
+2<lt><lt>
diff --git a/tests/vimtests/indent/6.test b/tests/vimtests/indent/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/6.test
@@ -0,0 +1,14 @@
+-- Input
+(2,6)
+foo
+    bar
+    baz
+    123
+-- Output
+(2,1)
+foo
+bar
+baz
+    123
+-- Events
+Vj<lt>
diff --git a/tests/vimtests/indent/7.test b/tests/vimtests/indent/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/7.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+    foo
+    bar
+
+    baz
+    123
+
+-- Output
+(1,9)
+        foo
+        bar
+
+        baz
+        123
+
+-- Events
+5>>
diff --git a/tests/vimtests/indent/8.test b/tests/vimtests/indent/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/8.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+        foo
+        bar
+
+        baz
+        123
+
+-- Output
+(1,5)
+    foo
+    bar
+
+    baz
+    123
+
+-- Events
+<lt>4j
diff --git a/tests/vimtests/indent/setpaste.test b/tests/vimtests/indent/setpaste.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/indent/setpaste.test
@@ -0,0 +1,14 @@
+-- Input
+(1,7)
+    foo
+    bar
+    baz
+-- Output
+(3,3)
+    foo
+    quux
+123
+    bar
+    baz
+-- Events
+a<CR>quux<Esc>:set paste<CR>a<CR>123<Esc>
diff --git a/tests/vimtests/insertion/2o.test b/tests/vimtests/insertion/2o.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/2o.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(4,3)
+123
+456
+abc
+abc
+789
+-- Events
+2oabc<Esc>
diff --git a/tests/vimtests/insertion/C-c_0.test b/tests/vimtests/insertion/C-c_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+bar
+-- Output
+(1,1)
+ar
+-- Events
+s<C-c>
diff --git a/tests/vimtests/insertion/C-c_1.test b/tests/vimtests/insertion/C-c_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+bar
+-- Output
+(1,1)
+br
+-- Events
+ls<C-c>
diff --git a/tests/vimtests/insertion/C-c_10.test b/tests/vimtests/insertion/C-c_10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_10.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,1)
+foo
+
+bar
+-- Events
+o<C-c>
diff --git a/tests/vimtests/insertion/C-c_11.test b/tests/vimtests/insertion/C-c_11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_11.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar
+-- Output
+(1,1)
+oo bar
+-- Events
+wlI<C-c>x
diff --git a/tests/vimtests/insertion/C-c_12.test b/tests/vimtests/insertion/C-c_12.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_12.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar
+-- Output
+(1,5)
+foo ar
+-- Events
+wli<C-c>x
diff --git a/tests/vimtests/insertion/C-c_13.test b/tests/vimtests/insertion/C-c_13.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_13.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar
+-- Output
+(1,10)
+foo bhelloar
+-- Events
+wlihello<C-c>
diff --git a/tests/vimtests/insertion/C-c_2.test b/tests/vimtests/insertion/C-c_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+
+bar
+-- Events
+S<C-c>
diff --git a/tests/vimtests/insertion/C-c_3.test b/tests/vimtests/insertion/C-c_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+baz bar
+-- Output
+(1,6)
+baz ba
+-- Events
+lA<C-c>x
diff --git a/tests/vimtests/insertion/C-c_4.test b/tests/vimtests/insertion/C-c_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+baz bar
+-- Output
+(1,2)
+bz bar
+-- Events
+la<C-c>x
diff --git a/tests/vimtests/insertion/C-c_5.test b/tests/vimtests/insertion/C-c_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+
+bar
+baz
+-- Events
+C<C-c>
diff --git a/tests/vimtests/insertion/C-c_6.test b/tests/vimtests/insertion/C-c_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_6.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar baz
+-- Output
+(1,1)
+ baz
+-- Events
+c2w<C-c>
diff --git a/tests/vimtests/insertion/C-c_7.test b/tests/vimtests/insertion/C-c_7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_7.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(3,1)
+foo
+bar
+
+baz
+-- Events
+jo<C-c>
diff --git a/tests/vimtests/insertion/C-c_8.test b/tests/vimtests/insertion/C-c_8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_8.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,1)
+foo
+
+bar
+baz
+-- Events
+jO<C-c>
diff --git a/tests/vimtests/insertion/C-c_9.test b/tests/vimtests/insertion/C-c_9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-c_9.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+
+foo
+bar
+-- Events
+O<C-c>
diff --git a/tests/vimtests/insertion/C-d_0.test b/tests/vimtests/insertion/C-d_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,5)
+    foo
+-- Events
+i<C-t>
diff --git a/tests/vimtests/insertion/C-d_1.test b/tests/vimtests/insertion/C-d_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+    foo
+-- Output
+(1,1)
+foo
+-- Events
+i<C-d>
diff --git a/tests/vimtests/insertion/C-d_2.test b/tests/vimtests/insertion/C-d_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+foo
+bar
+-- Events
+i<C-t><C-d>
diff --git a/tests/vimtests/insertion/C-d_3.test b/tests/vimtests/insertion/C-d_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,6)
+    foo
+-- Output
+(1,2)
+foo
+-- Events
+i<C-d>
diff --git a/tests/vimtests/insertion/C-d_4.test b/tests/vimtests/insertion/C-d_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,2)
+foo
+-- Output
+(1,6)
+    foo
+-- Events
+i<C-t>
diff --git a/tests/vimtests/insertion/C-d_5.test b/tests/vimtests/insertion/C-d_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_5.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+foo
+
+bar
+-- Output
+(2,5)
+foo
+    
+bar
+-- Events
+i<C-t>
diff --git a/tests/vimtests/insertion/C-d_6.test b/tests/vimtests/insertion/C-d_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-d_6.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+foo
+
+bar
+-- Output
+(2,1)
+foo
+
+bar
+-- Events
+i<C-d>
diff --git a/tests/vimtests/insertion/C-e_0.test b/tests/vimtests/insertion/C-e_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-e_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+bfoo
+bar
+-- Events
+i<C-e><Esc>
diff --git a/tests/vimtests/insertion/C-e_1.test b/tests/vimtests/insertion/C-e_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-e_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,3)
+barfoo
+bar
+-- Events
+i<C-e><C-e><C-e><Esc>
diff --git a/tests/vimtests/insertion/C-e_2.test b/tests/vimtests/insertion/C-e_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-e_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+b
+-- Output
+(1,1)
+bfoo
+b
+-- Events
+i<C-e><C-e><C-e><Esc>
diff --git a/tests/vimtests/insertion/C-h_0.test b/tests/vimtests/insertion/C-h_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-h_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,1)
+foo
+-- Events
+i<C-h>
diff --git a/tests/vimtests/insertion/C-h_1.test b/tests/vimtests/insertion/C-h_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-h_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+ foo
+-- Output
+(1,1)
+foo
+-- Events
+li<C-h><Esc>
diff --git a/tests/vimtests/insertion/C-h_2.test b/tests/vimtests/insertion/C-h_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-h_2.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,3)
+foobar
+-- Events
+ji<C-h><Esc>
diff --git a/tests/vimtests/insertion/C-h_3.test b/tests/vimtests/insertion/C-h_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-h_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+1234567890
+-- Output
+(1,5)
+12345
+-- Events
+A<C-h><C-h><C-h><C-h><C-h><Esc>
diff --git a/tests/vimtests/insertion/C-h_4.test b/tests/vimtests/insertion/C-h_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-h_4.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+1
+2
+3
+-- Output
+(1,1)
+1
+-- Events
+GA<C-h><C-h><C-h><C-h><Esc>
diff --git a/tests/vimtests/insertion/C-o_2.test b/tests/vimtests/insertion/C-o_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-o_2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar baz
+-- Output
+(1,4)
+foo  baz
+-- Events
+i<C-o>7l<C-w><Esc>
diff --git a/tests/vimtests/insertion/C-o_3.test b/tests/vimtests/insertion/C-o_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-o_3.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,3)
+foo
+arbaz
+-- Events
+li<C-o>j<C-w><C-o>j<C-w>
diff --git a/tests/vimtests/insertion/C-o_4.test b/tests/vimtests/insertion/C-o_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-o_4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,3)
+ugougsausageosausage
+-- Events
+isausage<C-o>bugo<Esc>.
diff --git a/tests/vimtests/insertion/C-r_0.test b/tests/vimtests/insertion/C-r_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-r_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+barbaz
+-- Output
+(1,3)
+barbarbaz
+-- Events
+"ay3li<C-r>a<Esc>
diff --git a/tests/vimtests/insertion/C-r_1.test b/tests/vimtests/insertion/C-r_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-r_1.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+bar
+baz
+-- Output
+(2,1)
+babar
+r
+baz
+-- Events
+"byylli<C-r>b<Esc>
diff --git a/tests/vimtests/insertion/C-w_0.test b/tests/vimtests/insertion/C-w_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-w_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,1)
+r
+-- Events
+$i<C-w>
diff --git a/tests/vimtests/insertion/C-w_1.test b/tests/vimtests/insertion/C-w_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-w_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,1)
+r
+-- Events
+$i<C-w>
diff --git a/tests/vimtests/insertion/C-y_0.test b/tests/vimtests/insertion/C-y_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-y_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,3)
+foo
+foobar
+-- Events
+ji<C-y><C-y><C-y><Esc>
diff --git a/tests/vimtests/insertion/C-y_1.test b/tests/vimtests/insertion/C-y_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-y_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,1)
+foo
+fbar
+-- Events
+ji<C-y><Esc>
diff --git a/tests/vimtests/insertion/C-y_2.test b/tests/vimtests/insertion/C-y_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/C-y_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+f
+bar
+-- Output
+(2,1)
+f
+fbar
+-- Events
+ji<C-y><C-y><C-y><Esc>
diff --git a/tests/vimtests/insertion/O2.test b/tests/vimtests/insertion/O2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/O2.test
@@ -0,0 +1,13 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(2,1)
+abc
+
+def
+ghi
+-- Events
+O<Esc>
diff --git a/tests/vimtests/insertion/O4.test b/tests/vimtests/insertion/O4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/O4.test
@@ -0,0 +1,11 @@
+-- Input
+(2,1)
+
+
+-- Output
+(2,1)
+
+
+
+-- Events
+O<Esc>
diff --git a/tests/vimtests/insertion/a.test b/tests/vimtests/insertion/a.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/a.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,4)
+foOOo
+-- Events
+ifoo<Esc>haOO<Esc>
diff --git a/tests/vimtests/insertion/a2.test b/tests/vimtests/insertion/a2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/a2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,3)
+fOOoo
+-- Events
+ifoo<Esc>0aOO<Esc>
diff --git a/tests/vimtests/insertion/a3.test b/tests/vimtests/insertion/a3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/a3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,5)
+fooOO
+-- Events
+ifoo<Esc>$aOO<Esc>
diff --git a/tests/vimtests/insertion/a4.test b/tests/vimtests/insertion/a4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/a4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,5)
+fooOO
+-- Events
+ifoo<Esc>aOO<Esc>
diff --git a/tests/vimtests/insertion/a_on_empty_line.test b/tests/vimtests/insertion/a_on_empty_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/a_on_empty_line.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+
+
+
+-- Output
+(2,1)
+
+q
+
+-- Events
+aq<Esc>
diff --git a/tests/vimtests/insertion/capA.test b/tests/vimtests/insertion/capA.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capA.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,5)
+fooOO
+-- Events
+ifoo<Esc>AOO<Esc>
diff --git a/tests/vimtests/insertion/capA2.test b/tests/vimtests/insertion/capA2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capA2.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+
+
+
+
+-- Output
+(2,3)
+
+foo
+
+
+-- Events
+Afoo<Esc>
diff --git a/tests/vimtests/insertion/capA3.test b/tests/vimtests/insertion/capA3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capA3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,5)
+fooOO
+-- Events
+ifoo<Esc>hAOO<Esc>
diff --git a/tests/vimtests/insertion/capA4.test b/tests/vimtests/insertion/capA4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capA4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,5)
+fooOO
+-- Events
+ifoo<Esc>$AOO<Esc>
diff --git a/tests/vimtests/insertion/capI.test b/tests/vimtests/insertion/capI.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capI.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,2)
+OOfoo
+-- Events
+ifoo<Esc>IOO<Esc>
diff --git a/tests/vimtests/insertion/capI2.test b/tests/vimtests/insertion/capI2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capI2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,7)
+    foo
+-- Output
+(1,7)
+    barfoo
+-- Events
+Ibar<Esc>
diff --git a/tests/vimtests/insertion/capI3.test b/tests/vimtests/insertion/capI3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capI3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,7)
+
+-- Output
+(1,3)
+bar
+-- Events
+Ibar<Esc>
diff --git a/tests/vimtests/insertion/capO.test b/tests/vimtests/insertion/capO.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/capO.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(3,3)
+abc
+123
+456
+def
+ghi
+-- Events
+O123<CR>456<Esc>
diff --git a/tests/vimtests/insertion/counted_a.test b/tests/vimtests/insertion/counted_a.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_a.test
@@ -0,0 +1,8 @@
+-- Input
+(1,2)
+aa
+-- Output
+(1,44)
+aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-- Events
+42ax<Esc>
diff --git a/tests/vimtests/insertion/counted_capA.test b/tests/vimtests/insertion/counted_capA.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_capA.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+aa
+-- Output
+(1,44)
+aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-- Events
+42Ax<Esc>
diff --git a/tests/vimtests/insertion/counted_capI.test b/tests/vimtests/insertion/counted_capI.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_capI.test
@@ -0,0 +1,8 @@
+-- Input
+(1,2)
+aa
+-- Output
+(1,42)
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaa
+-- Events
+42Ix<Esc>
diff --git a/tests/vimtests/insertion/counted_capO.test b/tests/vimtests/insertion/counted_capO.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_capO.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(3,3)
+abc
+123
+123
+def
+ghi
+-- Events
+2O123<Esc>
diff --git a/tests/vimtests/insertion/counted_i.test b/tests/vimtests/insertion/counted_i.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_i.test
@@ -0,0 +1,8 @@
+-- Input
+(1,2)
+aa
+-- Output
+(1,25)
+axyzxyzxyzxyzxyzxyzxyzxyza
+-- Events
+8ixyz<Esc>
diff --git a/tests/vimtests/insertion/counted_o.test b/tests/vimtests/insertion/counted_o.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/counted_o.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(4,3)
+abc
+def
+123
+123
+ghi
+-- Events
+2o123<Esc>
diff --git a/tests/vimtests/insertion/i.test b/tests/vimtests/insertion/i.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/i.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,3)
+fOOoo
+-- Events
+ifoo<Esc>hiOO<Esc>
diff --git a/tests/vimtests/insertion/i2.test b/tests/vimtests/insertion/i2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/i2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,2)
+OOfoo
+-- Events
+ifoo<Esc>0iOO<Esc>
diff --git a/tests/vimtests/insertion/i3.test b/tests/vimtests/insertion/i3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/i3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,4)
+foOOo
+-- Events
+ifoo<Esc>$iOO<Esc>
diff --git a/tests/vimtests/insertion/indent_0.test b/tests/vimtests/insertion/indent_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_0.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(4,9)
+    foo
+    bar
+
+    xyzzy
+    baz
+-- Events
+jo<CR>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/indent_1.test b/tests/vimtests/insertion/indent_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_1.test
@@ -0,0 +1,11 @@
+-- Input
+(1,8)
+    foo bar
+    baz
+-- Output
+(2,4)
+    foo
+    bar
+    baz
+-- Events
+i<CR><Esc>
diff --git a/tests/vimtests/insertion/indent_2.test b/tests/vimtests/insertion/indent_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_2.test
@@ -0,0 +1,11 @@
+-- Input
+(1,9)
+    foo bar
+    baz
+-- Output
+(2,4)
+    foo 
+    bar
+    baz
+-- Events
+i<CR><Esc>
diff --git a/tests/vimtests/insertion/indent_3.test b/tests/vimtests/insertion/indent_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_3.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(6,9)
+    foo
+    bar
+
+
+
+    xyzzy
+    baz
+-- Events
+jo<CR><CR><CR>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/indent_4.test b/tests/vimtests/insertion/indent_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_4.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(6,1)
+    foo
+    bar
+
+
+
+
+    baz
+-- Events
+jo<CR><CR><CR><Esc>
diff --git a/tests/vimtests/insertion/indent_5.test b/tests/vimtests/insertion/indent_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_5.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(6,5)
+    foo
+    bar
+
+
+
+xyzzy
+    baz
+-- Events
+jo<CR><C-d><CR><CR>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/indent_6.test b/tests/vimtests/insertion/indent_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_6.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(4,5)
+    foo
+    bar
+
+xyzzy
+    baz
+-- Events
+jo<CR><C-d>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/indent_7.test b/tests/vimtests/insertion/indent_7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_7.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+-- Output
+(4,5)
+    foo
+    bar
+
+xyzzy
+    baz
+-- Events
+jo<C-d><CR>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/indent_8.test b/tests/vimtests/insertion/indent_8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/indent_8.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+        foo
+        bar
+        baz
+-- Output
+(6,9)
+        foo
+        bar
+
+
+
+    xyzzy
+        baz
+-- Events
+jo<CR><C-d><CR><CR>xyzzy<Esc>
diff --git a/tests/vimtests/insertion/nl_insert.test b/tests/vimtests/insertion/nl_insert.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/nl_insert.test
@@ -0,0 +1,9 @@
+-- Input
+(1,2)
+x
+-- Output
+(2,1)
+xbc
+d
+-- Events
+abc<CR>d<Esc>
diff --git a/tests/vimtests/insertion/o.test b/tests/vimtests/insertion/o.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/o.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(4,3)
+abc
+def
+123
+456
+ghi
+-- Events
+o123<CR>456<Esc>
diff --git a/tests/vimtests/insertion/o1.test b/tests/vimtests/insertion/o1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/o1.test
@@ -0,0 +1,13 @@
+-- Input
+(2,1)
+abc
+def
+ghi
+-- Output
+(3,1)
+abc
+def
+
+ghi
+-- Events
+o<Esc>
diff --git a/tests/vimtests/insertion/o3.test b/tests/vimtests/insertion/o3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/o3.test
@@ -0,0 +1,11 @@
+-- Input
+(2,1)
+
+
+-- Output
+(3,1)
+
+
+
+-- Events
+o<Esc>
diff --git a/tests/vimtests/insertion/onechar.test b/tests/vimtests/insertion/onechar.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/onechar.test
@@ -0,0 +1,11 @@
+-- Input
+(1,4)
+foo
+bar
+-- Output
+(2,1)
+foo
+x
+bar
+-- Events
+i<CR>x<Esc>
diff --git a/tests/vimtests/insertion/spec_delete.test b/tests/vimtests/insertion/spec_delete.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/spec_delete.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,1)
+foo
+br
+baz
+-- Events
+i<Del><Esc>
diff --git a/tests/vimtests/insertion/spec_insert.test b/tests/vimtests/insertion/spec_insert.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/insertion/spec_insert.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+b1ar
+baz
+-- Events
+<Ins>1<Esc>
diff --git a/tests/vimtests/joinlines/1.test b/tests/vimtests/joinlines/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/joinlines/1.test
@@ -0,0 +1,9 @@
+-- Input
+(1,3)
+aaa
+bbb
+-- Output
+(1,4)
+aaa bbb
+-- Events
+J
diff --git a/tests/vimtests/joinlines/2.test b/tests/vimtests/joinlines/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/joinlines/2.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+aaa
+bbb
+-- Output
+(1,4)
+aaa bbb
+-- Events
+J
diff --git a/tests/vimtests/joinlines/counted_1.test b/tests/vimtests/joinlines/counted_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/joinlines/counted_1.test
@@ -0,0 +1,9 @@
+-- Input
+(1,3)
+aaa
+bbb
+-- Output
+(1,4)
+aaa bbb
+-- Events
+1J
diff --git a/tests/vimtests/joinlines/counted_2.test b/tests/vimtests/joinlines/counted_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/joinlines/counted_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,2)
+aaa
+bbb
+ccc
+-- Output
+(1,8)
+aaa bbb ccc
+-- Events
+3J
diff --git a/tests/vimtests/jumplist/1.test b/tests/vimtests/jumplist/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/jumplist/1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Output
+(2,7)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Events
+w***<C-o><C-o>
diff --git a/tests/vimtests/jumplist/2.test b/tests/vimtests/jumplist/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/jumplist/2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Output
+(4,7)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Events
+w***<C-o><C-o><Tab><Tab>
diff --git a/tests/vimtests/macros/0.test b/tests/vimtests/macros/0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/0.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,5)
+qwf
+arfoos
+zxc
+-- Events
+qaafoo<Esc>q
diff --git a/tests/vimtests/macros/1.test b/tests/vimtests/macros/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,11)
+qwf
+arfoofoofoos
+zxc
+-- Events
+qaafoo<Esc>q@a@a
diff --git a/tests/vimtests/macros/10.test b/tests/vimtests/macros/10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/10.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,11)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+q1eq2@1
diff --git a/tests/vimtests/macros/11.test b/tests/vimtests/macros/11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/11.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,8)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+q1f3lq@1
diff --git a/tests/vimtests/macros/12.test b/tests/vimtests/macros/12.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/12.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,15)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+q1eeq@1
diff --git a/tests/vimtests/macros/13.test b/tests/vimtests/macros/13.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/13.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+abc
+
+-- Output
+(2,10)
+abc123
+A123<Esc>b
+-- Events
+qqA123<Esc>bqj"qp
diff --git a/tests/vimtests/macros/14.test b/tests/vimtests/macros/14.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/14.test
@@ -0,0 +1,10 @@
+-- Input
+(2,1)
+abc
+A123<Esc>b
+-- Output
+(1,1)
+abc123
+A123<Esc>b
+-- Events
+"0yyk@0
diff --git a/tests/vimtests/macros/15.test b/tests/vimtests/macros/15.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/15.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,4)
+^x$x
+-- Events
+qr^x$xq"rp
diff --git a/tests/vimtests/macros/16.test b/tests/vimtests/macros/16.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/16.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+^x$x
+"123 123 123"
+"123 123 123"
+-- Output
+(3,11)
+^x$x
+123 123 123
+123 123 123
+-- Events
+"ry$j@rj@r
diff --git a/tests/vimtests/macros/2.test b/tests/vimtests/macros/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/2.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,2)
+qwf
+ars
+zxc
+-- Events
+qaq
diff --git a/tests/vimtests/macros/3.test b/tests/vimtests/macros/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/3.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,8)
+qwf
+arfoofoos
+zxc
+-- Events
+qaafoo<Esc>q@a
diff --git a/tests/vimtests/macros/4.test b/tests/vimtests/macros/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/4.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,11)
+qwf
+arfoofoofoos
+zxc
+-- Events
+qaafoo<Esc>q2@a
diff --git a/tests/vimtests/macros/5.test b/tests/vimtests/macros/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/5.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+qwf
+ars
+zxc
+-- Output
+(2,4)
+qwf
+afoorfoofoos
+zxc
+-- Events
+qaafoo<Esc>q@a0@a
diff --git a/tests/vimtests/macros/6.test b/tests/vimtests/macros/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,7)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+qqf3q@q
diff --git a/tests/vimtests/macros/7.test b/tests/vimtests/macros/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/7.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,11)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+qqf3q2@q
diff --git a/tests/vimtests/macros/8.test b/tests/vimtests/macros/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/8.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,7)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+q1f3q@1
diff --git a/tests/vimtests/macros/9.test b/tests/vimtests/macros/9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/macros/9.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Output
+(1,7)
+123 123 123 qwf
+123 123 123 ars
+123 123 123 zxc
+-- Events
+q1eq@1
diff --git a/tests/vimtests/marks/unjump_backquote.test b/tests/vimtests/marks/unjump_backquote.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/marks/unjump_backquote.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Output
+(2,7)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+-- Events
+w**``
diff --git a/tests/vimtests/marks/unjump_quote.test b/tests/vimtests/marks/unjump_quote.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/marks/unjump_quote.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+-- Output
+(2,5)
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+-- Events
+ww**''
diff --git a/tests/vimtests/marks/unjump_quote_blank.test b/tests/vimtests/marks/unjump_quote_blank.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/marks/unjump_quote_blank.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    Lorem ipsum dolor sit amet
+                
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+-- Output
+(2,16)
+    Lorem ipsum dolor sit amet
+                
+    Lorem ipsum dolor sit amet
+    Lorem ipsum dolor sit amet
+-- Events
+wwjG''
diff --git a/tests/vimtests/movement/empty.test b/tests/vimtests/movement/empty.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/movement/empty.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,1)
+
+-- Events
+hjkl
diff --git a/tests/vimtests/movement/empty_1.test b/tests/vimtests/movement/empty_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/movement/empty_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,1)
+
+-- Events
+ggG$0
diff --git a/tests/vimtests/movement/eol_j.test b/tests/vimtests/movement/eol_j.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/movement/eol_j.test
@@ -0,0 +1,14 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Output
+(4,12)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Events
+$jj
diff --git a/tests/vimtests/movement/eol_j2.test b/tests/vimtests/movement/eol_j2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/movement/eol_j2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Events
+$0j
diff --git a/tests/vimtests/movement/v_eol_j2.test b/tests/vimtests/movement/v_eol_j2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/movement/v_eol_j2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+
+qwe rty uiop
+-- Events
+v$0j
diff --git a/tests/vimtests/numbers/cursor_on_digits.test b/tests/vimtests/numbers/cursor_on_digits.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/cursor_on_digits.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Test increasing 109 to 110 when cursor is on 9.
+Test increasing 109 to 110 when cursor is on 0.
+Test increasing 109 to 110 when cursor is on 1.
+Test increasing 109 to 110 when cursor is on space before 1.
+-- Output
+(4,19)
+Test increasing 110 to 110 when cursor is on 9.
+Test increasing 110 to 110 when cursor is on 0.
+Test increasing 110 to 110 when cursor is on 1.
+Test increasing 110 to 110 when cursor is on space before 1.
+-- Events
+3e<C-a>jh<C-a>j2h<C-a>j3h<C-a>
diff --git a/tests/vimtests/numbers/decrement.test b/tests/vimtests/numbers/decrement.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/decrement.test
@@ -0,0 +1,20 @@
+-- Input
+(1,1)
+Test decreasing 101 to 99
+Test decreasing 11 to 9
+Test decreasing 9 to 1
+Test decreasing 1 to 0
+Test decreasing 0 to -1
+Test decreasing -1 to -11
+Test decreasing -99 to -101
+-- Output
+(7,20)
+Test decreasing 99 to 99
+Test decreasing 9 to 9
+Test decreasing 1 to 1
+Test decreasing 0 to 0
+Test decreasing -1 to -1
+Test decreasing -11 to -11
+Test decreasing -101 to -101
+-- Events
+2<C-x>j2<C-x>j8<C-x>j<C-x>j<C-x>j10<C-x>j2<C-x>
diff --git a/tests/vimtests/numbers/hex_decrease.test b/tests/vimtests/numbers/hex_decrease.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/hex_decrease.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+Test decreasing 0x1 to 0x0
+Test decreasing 0xa to 0x9
+Test decreasing 0x10 to 0xf
+Test decreasing 0x20 to 0x1f
+Test decreasing 0x100 to 0xff
+-- Output
+(5,20)
+Test decreasing 0x0 to 0x0
+Test decreasing 0x9 to 0x9
+Test decreasing 0xf to 0xf
+Test decreasing 0x1f to 0x1f
+Test decreasing 0xff to 0xff
+-- Events
+<C-x>j<C-x>j<C-x>j<C-x>j<C-x>
diff --git a/tests/vimtests/numbers/hex_increase.test b/tests/vimtests/numbers/hex_increase.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/hex_increase.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+Test increasing 0x1 to 0x2
+Test increasing 0x9 to 0xa
+Test increasing 0xf to 0x10
+Test increasing 0x1f to 0x20
+Test increasing 0xff to 0x100
+-- Output
+(5,21)
+Test increasing 0x2 to 0x2
+Test increasing 0xa to 0xa
+Test increasing 0x10 to 0x10
+Test increasing 0x20 to 0x20
+Test increasing 0x100 to 0x100
+-- Events
+<C-a>j<C-a>j<C-a>j<C-a>j<C-a>
diff --git a/tests/vimtests/numbers/increment.test b/tests/vimtests/numbers/increment.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/increment.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Test increasing 0 to 11
+Test increasing -11 to 11
+Test increasing -101 to -99
+Test increasing 99 to 101
+-- Output
+(4,19)
+Test increasing 11 to 11
+Test increasing 11 to 11
+Test increasing -99 to -99
+Test increasing 101 to 101
+-- Events
+11<C-a>j22<C-a>j2<C-a>jh2<C-a>
diff --git a/tests/vimtests/numbers/no_numbers.test b/tests/vimtests/numbers/no_numbers.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/no_numbers.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Test case if numbers are not present on the line.
+This should not cause yi to freeze.
+This should not cause the cursor to move.
+-- Output
+(3,1)
+Test case if numbers are not present on the line.
+This should not cause yi to freeze.
+This should not cause the cursor to move.
+-- Events
+<C-a><C-x>j<C-a><C-x>$<C-a><C-x>^11<C-x>j
diff --git a/tests/vimtests/numbers/oct_decrease.test b/tests/vimtests/numbers/oct_decrease.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/oct_decrease.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Test decreasing 0o1 to 0o0
+Test decreasing 0o10 to 0o7
+Test decreasing 0o20 to 0o17
+Test decreasing 0o100 to 0o77
+-- Output
+(4,20)
+Test decreasing 0o0 to 0o0
+Test decreasing 0o7 to 0o7
+Test decreasing 0o17 to 0o17
+Test decreasing 0o77 to 0o77
+-- Events
+<C-x>j<C-x>j<C-x>j<C-x>
diff --git a/tests/vimtests/numbers/oct_hex_letters.test b/tests/vimtests/numbers/oct_hex_letters.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/oct_hex_letters.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+Make sure aa bb cc dd ee ff 0x1 increments correctly.
+Make sure oo 0o1 increments correctly.
+-- Output
+(2,16)
+Make sure aa bb cc dd ee ff 0x2 increments correctly.
+Make sure oo 0o2 increments correctly.
+-- Events
+<C-a>+<C-a>
diff --git a/tests/vimtests/numbers/oct_increase.test b/tests/vimtests/numbers/oct_increase.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/oct_increase.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Test increasing 0o1 to 0o2
+Test increasing 0o7 to 0o10
+Test increasing 0o17 to 0o20
+Test increasing 0o77 to 0o100
+-- Output
+(4,21)
+Test increasing 0o2 to 0o2
+Test increasing 0o10 to 0o10
+Test increasing 0o20 to 0o20
+Test increasing 0o100 to 0o100
+-- Events
+<C-a>j<C-a>j<C-a>j<C-a>
diff --git a/tests/vimtests/numbers/sol_eol.test b/tests/vimtests/numbers/sol_eol.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/numbers/sol_eol.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+0x1
+0o1
+1
+-- Output
+(3,1)
+0x5
+0o4
+3
+-- Events
+4<C-a>j3<C-a>j2<C-a>
diff --git a/tests/vimtests/paste/2dd_capP.test b/tests/vimtests/paste/2dd_capP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/2dd_capP.test
@@ -0,0 +1,14 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+foo
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+foo
+-- Events
+2ddP
diff --git a/tests/vimtests/paste/2dd_capP_1.test b/tests/vimtests/paste/2dd_capP_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/2dd_capP_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+abc def ghi
+qwe rty uiop
+Lorem ipsum dolor sit amet
+-- Events
+2ddP
diff --git a/tests/vimtests/paste/2ddp.test b/tests/vimtests/paste/2ddp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/2ddp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+qwe rty uiop
+Lorem ipsum dolor sit amet
+abc def ghi
+-- Events
+2ddp
diff --git a/tests/vimtests/paste/2ddp_1.test b/tests/vimtests/paste/2ddp_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/2ddp_1.test
@@ -0,0 +1,12 @@
+-- Input
+(3,3)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2ddp
diff --git a/tests/vimtests/paste/2yyp.test b/tests/vimtests/paste/2yyp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/2yyp.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+abc def ghi
+qwe rty uiop
+-- Events
+2yyp
diff --git a/tests/vimtests/paste/Yp.test b/tests/vimtests/paste/Yp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/Yp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,10)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,27)
+Lorem ipsuum dolor sit ametm dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+Yp
diff --git a/tests/vimtests/paste/d2wp.test b/tests/vimtests/paste/d2wp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/d2wp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,9)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,19)
+Lorem ipssum dolor it amet
+abc def ghi
+qwe rty uiop
+-- Events
+d2wp
diff --git a/tests/vimtests/paste/dbp.test b/tests/vimtests/paste/dbp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dbp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,9)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,9)
+Lorem sipum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dbp
diff --git a/tests/vimtests/paste/dd_capP.test b/tests/vimtests/paste/dd_capP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dd_capP.test
@@ -0,0 +1,12 @@
+-- Input
+(2,6)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ddP
diff --git a/tests/vimtests/paste/dd_capP_1.test b/tests/vimtests/paste/dd_capP_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dd_capP_1.test
@@ -0,0 +1,12 @@
+-- Input
+(3,6)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+qwe rty uiop
+abc def ghi
+-- Events
+ddP
diff --git a/tests/vimtests/paste/ddjp.test b/tests/vimtests/paste/ddjp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/ddjp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,1)
+abc def ghi
+qwe rty uiop
+Lorem ipsum dolor sit amet
+-- Events
+ddjp
diff --git a/tests/vimtests/paste/ddkP.test b/tests/vimtests/paste/ddkP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/ddkP.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+abc def ghi
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Events
+ddkP
diff --git a/tests/vimtests/paste/ddp.test b/tests/vimtests/paste/ddp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/ddp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+abc def ghi
+Lorem ipsum dolor sit amet
+qwe rty uiop
+-- Events
+ddp
diff --git a/tests/vimtests/paste/ddp_1.test b/tests/vimtests/paste/ddp_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/ddp_1.test
@@ -0,0 +1,12 @@
+-- Input
+(3,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ddp
diff --git a/tests/vimtests/paste/dep.test b/tests/vimtests/paste/dep.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dep.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+ Loremipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dep
diff --git a/tests/vimtests/paste/dw_capP.test b/tests/vimtests/paste/dw_capP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dw_capP.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dwP
diff --git a/tests/vimtests/paste/dwp.test b/tests/vimtests/paste/dwp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/dwp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+iLorem psum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dwp
diff --git a/tests/vimtests/paste/p_at_newline.test b/tests/vimtests/paste/p_at_newline.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/p_at_newline.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+abc
+def
+
+123
+456 789
+xxx
+-- Output
+(3,3)
+abc
+def
+789
+123
+456 
+xxx
+-- Events
+4j4ld$2kp
diff --git a/tests/vimtests/paste/p_at_newline2.test b/tests/vimtests/paste/p_at_newline2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/p_at_newline2.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+abc
+def
+
+123
+456 789
+xxx
+-- Output
+(3,3)
+abc
+def
+789
+123
+456 
+xxx
+-- Events
+4j4ld$2kP
diff --git a/tests/vimtests/paste/visual.test b/tests/vimtests/paste/visual.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/visual.test
@@ -0,0 +1,13 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,3)
+Lorem ipsum dolor sit amet
+abbc def ghi
+qwec def ghi
+qwe rty uiop
+-- Events
+vjlyp
diff --git a/tests/vimtests/paste/y_1.test b/tests/vimtests/paste/y_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/y_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+1234
+abcd
+xyzw
+-- Output
+(2,4)
+1234
+abcdbcd
+xyzw
+-- Events
+y$P
diff --git a/tests/vimtests/paste/y_2.test b/tests/vimtests/paste/y_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/y_2.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+1234
+abcd
+xyzw
+-- Output
+(2,4)
+1234
+abcdbcd
+xyzw
+-- Events
+y3lP
diff --git a/tests/vimtests/paste/y_3.test b/tests/vimtests/paste/y_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/y_3.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+1234
+abcd
+xyzw
+-- Output
+(2,4)
+1234
+abcdbcd
+xyzw
+-- Events
+y20lP
diff --git a/tests/vimtests/paste/yep.test b/tests/vimtests/paste/yep.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/yep.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+LLoremorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+yep
diff --git a/tests/vimtests/paste/yjp.test b/tests/vimtests/paste/yjp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/yjp.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+abc def ghi
+qwe rty uiop
+-- Events
+yjp
diff --git a/tests/vimtests/paste/ywp.test b/tests/vimtests/paste/ywp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/ywp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+LLorem orem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+ywp
diff --git a/tests/vimtests/paste/yy_capP.test b/tests/vimtests/paste/yy_capP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/yy_capP.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+yyP
diff --git a/tests/vimtests/paste/yyp.test b/tests/vimtests/paste/yyp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/paste/yyp.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+yyp
diff --git a/tests/vimtests/repeat/2r.test b/tests/vimtests/repeat/2r.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/2r.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdef
+-- Output
+(1,6)
+xxcdxx
+-- Events
+2rx3l.
diff --git a/tests/vimtests/repeat/a.test b/tests/vimtests/repeat/a.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/a.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,10)
+fABCABCABCoo
+-- Events
+aABC<Esc>..
diff --git a/tests/vimtests/repeat/a2.test b/tests/vimtests/repeat/a2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/a2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,10)
+fABCABCABCoo
+-- Events
+aABC<Esc>2.
diff --git a/tests/vimtests/repeat/a3.test b/tests/vimtests/repeat/a3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/a3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,28)
+fABCABCABCABCABCABCABCABCABCoo
+-- Events
+3aABC<Esc>..
diff --git a/tests/vimtests/repeat/a4.test b/tests/vimtests/repeat/a4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/a4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,16)
+fABCABCABCABCABCoo
+-- Events
+3aABC<Esc>2.
diff --git a/tests/vimtests/repeat/a5.test b/tests/vimtests/repeat/a5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/a5.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,28)
+fABCABCABCABCABCABCABCABCABCoo
+-- Events
+3aABC<Esc>y<Esc>.d<Esc>.
diff --git a/tests/vimtests/repeat/capA.test b/tests/vimtests/repeat/capA.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capA.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,12)
+fooABCABCABC
+-- Events
+AABC<Esc>..
diff --git a/tests/vimtests/repeat/capA2.test b/tests/vimtests/repeat/capA2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capA2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,12)
+fooABCABCABC
+-- Events
+AABC<Esc>2.
diff --git a/tests/vimtests/repeat/capA3.test b/tests/vimtests/repeat/capA3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capA3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,30)
+fooABCABCABCABCABCABCABCABCABC
+-- Events
+3AABC<Esc>..
diff --git a/tests/vimtests/repeat/capA4.test b/tests/vimtests/repeat/capA4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capA4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,18)
+fooABCABCABCABCABC
+-- Events
+3AABC<Esc>2.
diff --git a/tests/vimtests/repeat/capC.test b/tests/vimtests/repeat/capC.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capC.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo bar
+foo  baz
+-- Output
+(2,9)
+foo quux
+foo  quux
+-- Events
+wCquux<Esc>j0w.
diff --git a/tests/vimtests/repeat/capI.test b/tests/vimtests/repeat/capI.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capI.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,3)
+ABCABCABCfoo
+-- Events
+IABC<Esc>..
diff --git a/tests/vimtests/repeat/capI2.test b/tests/vimtests/repeat/capI2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capI2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,6)
+ABCABCABCfoo
+-- Events
+IABC<Esc>2.
diff --git a/tests/vimtests/repeat/capI3.test b/tests/vimtests/repeat/capI3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capI3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,6)
+ABCABCABCABCABCfoo
+-- Events
+3IABC<Esc>2.
diff --git a/tests/vimtests/repeat/capI4.test b/tests/vimtests/repeat/capI4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capI4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,9)
+ABCABCABCABCABCABCABCABCABCfoo
+-- Events
+3IABC<Esc>..
diff --git a/tests/vimtests/repeat/capO.test b/tests/vimtests/repeat/capO.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capO.test
@@ -0,0 +1,18 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(5,3)
+123
+abc
+abc
+abc
+abc
+abc
+abc
+456
+789
+-- Events
+2Oabc<Esc>..
diff --git a/tests/vimtests/repeat/capO2.test b/tests/vimtests/repeat/capO2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capO2.test
@@ -0,0 +1,15 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(3,3)
+123
+abc
+abc
+abc
+456
+789
+-- Events
+Oabc<Esc>2.
diff --git a/tests/vimtests/repeat/capO3.test b/tests/vimtests/repeat/capO3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capO3.test
@@ -0,0 +1,15 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(2,3)
+123
+abc
+abc
+abc
+456
+789
+-- Events
+Oabc<Esc>..
diff --git a/tests/vimtests/repeat/capX.test b/tests/vimtests/repeat/capX.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capX.test
@@ -0,0 +1,12 @@
+-- Input
+(2,5)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+adef ghi
+qwe rty uiop
+-- Events
+X..
diff --git a/tests/vimtests/repeat/capX_1.test b/tests/vimtests/repeat/capX_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/capX_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,8)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+a ghi
+qwe rty uiop
+-- Events
+2X..
diff --git a/tests/vimtests/repeat/counted_2r.test b/tests/vimtests/repeat/counted_2r.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/counted_2r.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdefg
+-- Output
+(1,7)
+xxxdexx
+-- Events
+3rx3l2.
diff --git a/tests/vimtests/repeat/dw_capP.test b/tests/vimtests/repeat/dw_capP.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/dw_capP.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,16)
+LoremLoremLorem   ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dwP..
diff --git a/tests/vimtests/repeat/dwp.test b/tests/vimtests/repeat/dwp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/dwp.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,19)
+iLorem Lorem Lorem psum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+dwp..
diff --git a/tests/vimtests/repeat/i.test b/tests/vimtests/repeat/i.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/i.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,7)
+ABABABCCCfoo
+-- Events
+iABC<Esc>..
diff --git a/tests/vimtests/repeat/i2.test b/tests/vimtests/repeat/i2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/i2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,8)
+ABABCABCCfoo
+-- Events
+iABC<Esc>2.
diff --git a/tests/vimtests/repeat/i3.test b/tests/vimtests/repeat/i3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/i3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,14)
+ABCABCABABCABCCfoo
+-- Events
+3iABC<Esc>2.
diff --git a/tests/vimtests/repeat/i4.test b/tests/vimtests/repeat/i4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/i4.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,25)
+ABCABCABABCABCABABCABCABCCCfoo
+-- Events
+3iABC<Esc>..
diff --git a/tests/vimtests/repeat/o.test b/tests/vimtests/repeat/o.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/o.test
@@ -0,0 +1,18 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(8,3)
+123
+456
+abc
+abc
+abc
+abc
+abc
+abc
+789
+-- Events
+2oabc<Esc>..
diff --git a/tests/vimtests/repeat/o1.test b/tests/vimtests/repeat/o1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/o1.test
@@ -0,0 +1,17 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(7,3)
+123
+456
+abc
+abc
+abc
+abc
+abc
+789
+-- Events
+2oabc<Esc>3.
diff --git a/tests/vimtests/repeat/o2.test b/tests/vimtests/repeat/o2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/o2.test
@@ -0,0 +1,15 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(5,3)
+123
+456
+abc
+abc
+abc
+789
+-- Events
+oabc<Esc>2.
diff --git a/tests/vimtests/repeat/o3.test b/tests/vimtests/repeat/o3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/o3.test
@@ -0,0 +1,15 @@
+-- Input
+(2,1)
+123
+456
+789
+-- Output
+(5,3)
+123
+456
+abc
+abc
+abc
+789
+-- Events
+oabc<Esc>..
diff --git a/tests/vimtests/repeat/r.test b/tests/vimtests/repeat/r.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/r.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdef
+-- Output
+(1,5)
+xbxdxf
+-- Events
+rx2l.2l.
diff --git a/tests/vimtests/repeat/r_1.test b/tests/vimtests/repeat/r_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/r_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdef
+-- Output
+(1,3)
+xbxdef
+-- Events
+rx2l.
diff --git a/tests/vimtests/repeat/r_2.test b/tests/vimtests/repeat/r_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/r_2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdefghijk
+-- Output
+(1,8)
+xbxdexgxijk
+-- Events
+rx2l.3l.2l.
diff --git a/tests/vimtests/repeat/r_3.test b/tests/vimtests/repeat/r_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/r_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+abcdefghijk
+-- Output
+(1,6)
+xbxdefghijk
+-- Events
+rx2l.3l
diff --git a/tests/vimtests/repeat/tilde_repeat.test b/tests/vimtests/repeat/tilde_repeat.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/tilde_repeat.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+lOREM IPSUM dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+6~.
diff --git a/tests/vimtests/repeat/tilde_repeat_does_not_affect_other_lines.test b/tests/vimtests/repeat/tilde_repeat_does_not_affect_other_lines.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/tilde_repeat_does_not_affect_other_lines.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+abcdefghijklmnopqrstuvwxyz
+abc def ghi
+qwe rty uiop
+-- Output
+(1,26)
+ABCDEFGHIJKLMNOPQRSTUVWXYz
+abc def ghi
+qwe rty uiop
+-- Events
+13~..
diff --git a/tests/vimtests/repeat/x.test b/tests/vimtests/repeat/x.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/x.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+adef ghi
+qwe rty uiop
+-- Events
+x..
diff --git a/tests/vimtests/repeat/x_1.test b/tests/vimtests/repeat/x_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/x_1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+a ghi
+qwe rty uiop
+-- Events
+2x..
diff --git a/tests/vimtests/repeat/x_2.test b/tests/vimtests/repeat/x_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/repeat/x_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,6)
+Lemps dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2x2l.2l.
diff --git a/tests/vimtests/replace/0.test b/tests/vimtests/replace/0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,6)
+fooiarbaz
+-- Events
+3lrill
diff --git a/tests/vimtests/replace/1.test b/tests/vimtests/replace/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,7)
+foo123baz
+-- Events
+3lR123<Esc>l
diff --git a/tests/vimtests/replace/10.test b/tests/vimtests/replace/10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/10.test
@@ -0,0 +1,12 @@
+-- Input
+(3,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+r<C-e>
diff --git a/tests/vimtests/replace/11.test b/tests/vimtests/replace/11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/11.test
@@ -0,0 +1,12 @@
+-- Input
+(2,1)
+Lorem ipsum dolor sit amet
+
+qwe rty uiop
+-- Output
+(2,1)
+Lorem ipsum dolor sit amet
+
+qwe rty uiop
+-- Events
+rx
diff --git a/tests/vimtests/replace/2.test b/tests/vimtests/replace/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,6)
+fooxxxbaz
+-- Events
+3l3rx
diff --git a/tests/vimtests/replace/3.test b/tests/vimtests/replace/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/3.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,3)
+foo
+bxx
+baz
+-- Events
+5rx
diff --git a/tests/vimtests/replace/4.test b/tests/vimtests/replace/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/4.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+awc def ghi
+qwe rty uiop
+-- Events
+r<C-e>
diff --git a/tests/vimtests/replace/5.test b/tests/vimtests/replace/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/5.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+aoc def ghi
+qwe rty uiop
+-- Events
+r<C-y>
diff --git a/tests/vimtests/replace/6.test b/tests/vimtests/replace/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/6.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,5)
+Lorem ipsum dolor sit amet
+awe ref ghi
+qwe rty uiop
+-- Events
+4r<C-e>
diff --git a/tests/vimtests/replace/7.test b/tests/vimtests/replace/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/7.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,6)
+Lorem ipsum dolor sit amet
+aorem f ghi
+qwe rty uiop
+-- Events
+5r<C-y>
diff --git a/tests/vimtests/replace/8.test b/tests/vimtests/replace/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/8.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,12)
+foo123456789
+-- Events
+3lR123456789<Esc>
diff --git a/tests/vimtests/replace/9.test b/tests/vimtests/replace/9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/replace/9.test
@@ -0,0 +1,12 @@
+-- Input
+(1,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+r<C-y>
diff --git a/tests/vimtests/search/1.test b/tests/vimtests/search/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum olor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>x
diff --git a/tests/vimtests/search/2.test b/tests/vimtests/search/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/2.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum olor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>nx
diff --git a/tests/vimtests/search/3.test b/tests/vimtests/search/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/3.test
@@ -0,0 +1,16 @@
+-- Input
+(2,16)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,8)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+?dolor<CR>
diff --git a/tests/vimtests/search/4.test b/tests/vimtests/search/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/4.test
@@ -0,0 +1,16 @@
+-- Input
+(2,16)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+?dolor<CR>n
diff --git a/tests/vimtests/search/5.test b/tests/vimtests/search/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/5.test
@@ -0,0 +1,16 @@
+-- Input
+(2,16)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,8)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+?dolor<CR>nN
diff --git a/tests/vimtests/search/6.test b/tests/vimtests/search/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/6.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum olor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>nNx
diff --git a/tests/vimtests/search/7.test b/tests/vimtests/search/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/7.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum olor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>nnx
diff --git a/tests/vimtests/search/8.test b/tests/vimtests/search/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/8.test
@@ -0,0 +1,16 @@
+-- Input
+(2,16)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,8)
+Lorem ipsum dolor sit amet
+ ipsum dolor sit amet
+ ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+?dolor<CR>nnn
diff --git a/tests/vimtests/search/9.test b/tests/vimtests/search/9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/9.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+Foo
+-- Output
+(1,1)
+oo
+-- Events
+/<CR>x
diff --git a/tests/vimtests/search/counted_1.test b/tests/vimtests/search/counted_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2/dolor<CR>
diff --git a/tests/vimtests/search/counted_2.test b/tests/vimtests/search/counted_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_2.test
@@ -0,0 +1,14 @@
+-- Input
+(3,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2?dolor<CR>
diff --git a/tests/vimtests/search/counted_3.test b/tests/vimtests/search/counted_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+1/dolor<CR>
diff --git a/tests/vimtests/search/counted_capN_1.test b/tests/vimtests/search/counted_capN_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_capN_1.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>2N
diff --git a/tests/vimtests/search/counted_capN_2.test b/tests/vimtests/search/counted_capN_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_capN_2.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+?dolor<CR>2N
diff --git a/tests/vimtests/search/counted_n_1.test b/tests/vimtests/search/counted_n_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_n_1.test
@@ -0,0 +1,16 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(3,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>2n
diff --git a/tests/vimtests/search/counted_n_2.test b/tests/vimtests/search/counted_n_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_n_2.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(4,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>2nn
diff --git a/tests/vimtests/search/counted_n_3.test b/tests/vimtests/search/counted_n_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/counted_n_3.test
@@ -0,0 +1,18 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(4,13)
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>n2n
diff --git a/tests/vimtests/search/history1.test b/tests/vimtests/search/history1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/history1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum olor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>/amet<CR>gg/<C-p><C-p><CR>x
diff --git a/tests/vimtests/search/history2.test b/tests/vimtests/search/history2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/history2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,13)
+Lorem ipsum olor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>/amet<CR>gg/<C-p><Up><CR>x
diff --git a/tests/vimtests/search/history3.test b/tests/vimtests/search/history3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/history3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,23)
+Lorem ipsum dolor sit met
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>/amet<CR>gg/<C-p><Up><Down><CR>x
diff --git a/tests/vimtests/search/history4.test b/tests/vimtests/search/history4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/search/history4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,23)
+Lorem ipsum dolor sit met
+abc def ghi
+qwe rty uiop
+-- Events
+/dolor<CR>/amet<CR>gg/<C-p><Up><C-n><CR>x
diff --git a/tests/vimtests/searchword/g_pound.test b/tests/vimtests/searchword/g_pound.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/g_pound.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(3,7)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+g#
diff --git a/tests/vimtests/searchword/g_repeat_pound.test b/tests/vimtests/searchword/g_repeat_pound.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/g_repeat_pound.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(1,13)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+g#nnn
diff --git a/tests/vimtests/searchword/g_repeat_pound_1.test b/tests/vimtests/searchword/g_repeat_pound_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/g_repeat_pound_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(3,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+g#n
diff --git a/tests/vimtests/searchword/g_repeat_star.test b/tests/vimtests/searchword/g_repeat_star.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/g_repeat_star.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(3,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+g*nn
diff --git a/tests/vimtests/searchword/g_star.test b/tests/vimtests/searchword/g_star.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/g_star.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(1,13)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+g*
diff --git a/tests/vimtests/searchword/pound.test b/tests/vimtests/searchword/pound.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/pound.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(3,7)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+#
diff --git a/tests/vimtests/searchword/repeat_pound.test b/tests/vimtests/searchword/repeat_pound.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/repeat_pound.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(2,16)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+#nn
diff --git a/tests/vimtests/searchword/repeat_star.test b/tests/vimtests/searchword/repeat_star.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/repeat_star.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(3,7)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+*nn
diff --git a/tests/vimtests/searchword/star.test b/tests/vimtests/searchword/star.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/star.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(2,16)
+lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+*
diff --git a/tests/vimtests/searchword/star_2.test b/tests/vimtests/searchword/star_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/searchword/star_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,2)
+(lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Output
+(2,16)
+(lorem ipsum lorem2 dolor sit amet
+dolor sit amet lorem ipsum
+lorem-lorem ipsumipsum
+-- Events
+*
diff --git a/tests/vimtests/sort/1.test b/tests/vimtests/sort/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/sort/1.test
@@ -0,0 +1,26 @@
+-- Input
+(1,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+
+-- Output
+(10,1)
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+-- Events
+:sort<CR>
diff --git a/tests/vimtests/sort/2.test b/tests/vimtests/sort/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/sort/2.test
@@ -0,0 +1,26 @@
+-- Input
+(1,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+
+-- Output
+(3,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+
+-- Events
+:1,2sort<CR>
diff --git a/tests/vimtests/sort/3.test b/tests/vimtests/sort/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/sort/3.test
@@ -0,0 +1,26 @@
+-- Input
+(1,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+
+-- Output
+(1,1)
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+-- Events
+:4,5sort<CR>
diff --git a/tests/vimtests/sort/4.test b/tests/vimtests/sort/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/sort/4.test
@@ -0,0 +1,26 @@
+-- Input
+(1,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+
+-- Output
+(10,1)
+1
+2
+3
+4
+5
+6
+7
+8
+9
+
+-- Events
+:1,9sort<CR>
diff --git a/tests/vimtests/sort/5.test b/tests/vimtests/sort/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/sort/5.test
@@ -0,0 +1,24 @@
+-- Input
+(1,1)
+1
+2
+3
+5
+4
+6
+7
+8
+9
+-- Output
+(9,2)
+1
+2
+3
+4
+5
+6
+7
+8
+9
+-- Events
+:sort<CR>
diff --git a/tests/vimtests/switchcase/g_capU.test b/tests/vimtests/switchcase/g_capU.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/g_capU.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+LOREM IPSUM dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+gU2w
diff --git a/tests/vimtests/switchcase/gtilde.test b/tests/vimtests/switchcase/gtilde.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/gtilde.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+LOREM IPSUM dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+g~2w
diff --git a/tests/vimtests/switchcase/gtilde_1.test b/tests/vimtests/switchcase/gtilde_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/gtilde_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+lOREM IPSUM dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+g~2w
diff --git a/tests/vimtests/switchcase/gu.test b/tests/vimtests/switchcase/gu.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/gu.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+LOREM IPSUM dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+gu2w
diff --git a/tests/vimtests/switchcase/tilde_does_not_cross_lines.test b/tests/vimtests/switchcase/tilde_does_not_cross_lines.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/tilde_does_not_cross_lines.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+abcdefghijklmnopqrstuvwxyz
+abc def ghi
+qwe rty uiop
+-- Output
+(1,26)
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
+abc def ghi
+qwe rty uiop
+-- Events
+30~
diff --git a/tests/vimtests/switchcase/tilde_left_over_count_at_eol_is_ignored.test b/tests/vimtests/switchcase/tilde_left_over_count_at_eol_is_ignored.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/tilde_left_over_count_at_eol_is_ignored.test
@@ -0,0 +1,18 @@
+-- Input
+(2,1)
+12345678901234567890
+If tilde is given a
+count which is greater than the line length
+the case of the final character is switched exactly once.
+We have 18 characters in the first line, a count of 19
+should switch the final 'a' to 'A', not to 'A' and then back to 'a'.
+-- Output
+(2,19)
+12345678901234567890
+iF TILDE IS GIVEN A
+count which is greater than the line length
+the case of the final character is switched exactly once.
+We have 18 characters in the first line, a count of 19
+should switch the final 'a' to 'A', not to 'A' and then back to 'a'.
+-- Events
+20~
diff --git a/tests/vimtests/switchcase/tilde_near_eol.test b/tests/vimtests/switchcase/tilde_near_eol.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/tilde_near_eol.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,26)
+Lorem ipsum dolor sit ameT
+abc def ghi
+qwe rty uiop
+-- Events
+$~
diff --git a/tests/vimtests/switchcase/tilde_no_count.test b/tests/vimtests/switchcase/tilde_no_count.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/tilde_no_count.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,2)
+lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+~
diff --git a/tests/vimtests/switchcase/tilde_with_count.test b/tests/vimtests/switchcase/tilde_with_count.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/switchcase/tilde_with_count.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,11)
+lOREM IPSUm dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+10~
diff --git a/tests/vimtests/undo/1.test b/tests/vimtests/undo/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/1.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,3)
+foo
+bar
+baz
+-- Events
+A 123<Esc>u
diff --git a/tests/vimtests/undo/2.test b/tests/vimtests/undo/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/2.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,7)
+foo
+bar 123
+baz
+-- Events
+A 123<Esc>u<C-r>
diff --git a/tests/vimtests/undo/3.test b/tests/vimtests/undo/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/3.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+bar
+baz
+-- Events
+xu
diff --git a/tests/vimtests/undo/4.test b/tests/vimtests/undo/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+br
+baz
+-- Events
+jlxu<C-r>
diff --git a/tests/vimtests/undo/5.test b/tests/vimtests/undo/5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,7)
+foo
+bar 123
+baz
+-- Events
+jlA 123<Esc>A 456<Esc>u
diff --git a/tests/vimtests/undo/6.test b/tests/vimtests/undo/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,3)
+foo
+bar
+baz
+-- Events
+jlA 123<Esc>A 456<Esc>uu
diff --git a/tests/vimtests/undo/7.test b/tests/vimtests/undo/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/7.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,7)
+foo
+bar 123
+baz
+-- Events
+jlA 123<Esc>A 456<Esc>uu<C-r>
diff --git a/tests/vimtests/undo/8.test b/tests/vimtests/undo/8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/8.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,11)
+foo
+bar 123 456
+baz
+-- Events
+jlA 123<Esc>A 456<Esc>uu<C-r><C-r>
diff --git a/tests/vimtests/undo/9.test b/tests/vimtests/undo/9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/undo/9.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,3)
+foo
+bar
+baz
+-- Events
+jlA 123<Esc>A 456<Esc>uu<C-r>u
diff --git a/tests/vimtests/unicode/chinese-simp.test b/tests/vimtests/unicode/chinese-simp.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/unicode/chinese-simp.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,4)
+中文测试
+-- Events
+i中文测试<Esc>
diff --git a/tests/vimtests/unicode/chinese-trad.test b/tests/vimtests/unicode/chinese-trad.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/unicode/chinese-trad.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,4)
+中文測試
+-- Events
+i中文測試<Esc>
diff --git a/tests/vimtests/unicode/russian.test b/tests/vimtests/unicode/russian.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/unicode/russian.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+
+-- Output
+(1,16)
+Спасибопожалусто
+-- Events
+iСпасибопожалусто<Esc>
diff --git a/tests/vimtests/unsorted/2yy.test b/tests/vimtests/unsorted/2yy.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/unsorted/2yy.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,1)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Events
+2yy
diff --git a/tests/vimtests/unsorted/v3lcABC.test b/tests/vimtests/unsorted/v3lcABC.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/unsorted/v3lcABC.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+Lorem ipsum
+-- Output
+(1,8)
+ABCm ABCm
+-- Events
+v3lcABC<Esc>w.
diff --git a/tests/vimtests/visual/1.test b/tests/vimtests/visual/1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,2)
+1345678
+-- Events
+lv3lyx
diff --git a/tests/vimtests/visual/10.test b/tests/vimtests/visual/10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/10.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,5)
+1234678
+-- Events
+lv3l<Esc>x
diff --git a/tests/vimtests/visual/11.test b/tests/vimtests/visual/11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/11.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,5)
+1234678
+-- Events
+lv3l<C-c>x
diff --git a/tests/vimtests/visual/12.test b/tests/vimtests/visual/12.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/12.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,5)
+1234678
+-- Events
+lv3l<C-c>xv3ly
diff --git a/tests/vimtests/visual/13.test b/tests/vimtests/visual/13.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/13.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,1)
+2345678
+-- Events
+y<Esc>v3lyx
diff --git a/tests/vimtests/visual/14.test b/tests/vimtests/visual/14.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/14.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+ab1
+cd2
+-- Output
+(1,1)
+b1
+cd2
+-- Events
+jVlkgux
diff --git a/tests/vimtests/visual/15.test b/tests/vimtests/visual/15.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/15.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,2)
+fbaz
+-- Events
+lvlkkjl2ld
diff --git a/tests/vimtests/visual/2.test b/tests/vimtests/visual/2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+12345678
+-- Output
+(1,4)
+1235678
+-- Events
+$hv3hyx
diff --git a/tests/vimtests/visual/3.test b/tests/vimtests/visual/3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/3.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+aaa
+bbb
+-- Output
+(1,2)
+aA
+BBb
+-- Events
+lvj~x
diff --git a/tests/vimtests/visual/4.test b/tests/vimtests/visual/4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/4.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+123
+456
+-- Output
+(1,2)
+13
+456
+-- Events
+jlvkyx
diff --git a/tests/vimtests/visual/6.test b/tests/vimtests/visual/6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/6.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+12
+34
+-- Output
+(1,1)
+2
+34
+-- Events
+lVjyx
diff --git a/tests/vimtests/visual/7.test b/tests/vimtests/visual/7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/7.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+ab
+cd
+-- Output
+(1,1)
+b
+cd
+-- Events
+jVlkgux
diff --git a/tests/vimtests/visual/A_0.test b/tests/vimtests/visual/A_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/A_0.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+averyverylongline
+shortline
+shorter
+
+-- Output
+(1,18)
+averyverylonglineb
+shortlineb
+shorterb
+
+-- Events
+jjVkkAb<Esc>
diff --git a/tests/vimtests/visual/A_1.test b/tests/vimtests/visual/A_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/A_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+averyverylongline
+shortline
+
+-- Output
+(1,18)
+averyverylonglineb
+shortlineb
+
+-- Events
+VjAb<Esc>
diff --git a/tests/vimtests/visual/A_2.test b/tests/vimtests/visual/A_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/A_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+averyverylongline
+shortline
+
+-- Output
+(1,6)
+averybverylongline
+shortbline
+
+-- Events
+<C-v>j4lAb<Esc>
diff --git a/tests/vimtests/visual/A_3.test b/tests/vimtests/visual/A_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/A_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+123
+-- Output
+(1,7)
+123text
+-- Events
+<C-v>$Atext<Esc>
diff --git a/tests/vimtests/visual/CSs.test b/tests/vimtests/visual/CSs.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/CSs.test
@@ -0,0 +1,30 @@
+-- Input
+(1,1)
+0; nil       20; binil     40; quadnil
+1; un        21; biun      41; quadun
+2; bi        22; bibi      42; quadbi
+3; tri       23; bitri     43; quadtri
+4; quad      24; biquad    44; quadquad
+5; pent      25; bipent    45; quadpent
+6; hex       26; bihex     46; quadhex
+7; sept      27; bisept    47; quadsept
+8; oct       28; bioct     48; quadoct
+9; enn       29; bienn     49; quadenn
+X; dec       2X; bidec     4X; quaddec
+E; lev       2E; bilev     4E; quadlev
+-- Output
+(11,7)
+0; nil       20; binil     40; quadnil
+1; un        21; biun      41; quadun
+2; two       22; bibi      42; quadbi
+3; tri       23; bitri     43; quadtri
+4; quad      24; biquad    44; quadquad
+5; pent      25; bipent    45; quadpent
+6; six       26; bihex     46; quadhex
+7; sept      27; bisept    47; quadsept
+8; oct       28; bioct     48; quadoct
+9; nine      29; bienn     49; quadenn
+X; ten       2X; bidec     4X; quaddec
+E; lev       2E; bilev     4E; quadlev
+-- Events
+2j3lv3lstwo <Esc>4j03lvelcsix <Esc>3j03lv4lCnine <Esc>j03lvelSten <Esc>
diff --git a/tests/vimtests/visual/I_0.test b/tests/vimtests/visual/I_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/I_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+abc
+def
+-- Output
+(1,3)
+123abc
+123def
+-- Events
+VjI123<Esc>
diff --git a/tests/vimtests/visual/I_1.test b/tests/vimtests/visual/I_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/I_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+abc
+def
+-- Output
+(1,3)
+123abc
+123def
+-- Events
+<C-v>jI123<Esc>
diff --git a/tests/vimtests/visual/Vd.test b/tests/vimtests/visual/Vd.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/Vd.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+bar
+-- Events
+Vd
diff --git a/tests/vimtests/visual/capD_0.test b/tests/vimtests/visual/capD_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capD_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+baz
+-- Events
+lvjlD
diff --git a/tests/vimtests/visual/capD_1.test b/tests/vimtests/visual/capD_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capD_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+baz
+-- Events
+lVjlD
diff --git a/tests/vimtests/visual/capD_2.test b/tests/vimtests/visual/capD_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capD_2.test
@@ -0,0 +1,9 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,1)
+bar
+-- Events
+VjkD
diff --git a/tests/vimtests/visual/capU_0.test b/tests/vimtests/visual/capU_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capU_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo bar
+-- Output
+(1,1)
+FOO Bar
+-- Events
+vwgU
diff --git a/tests/vimtests/visual/capU_1.test b/tests/vimtests/visual/capU_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capU_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+FOO
+BAR
+BAZ
+-- Events
+VjjU
diff --git a/tests/vimtests/visual/capY_0.test b/tests/vimtests/visual/capY_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/capY_0.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+foo
+foo
+bar
+-- Output
+(2,1)
+foo
+foo
+foo
+bar
+-- Events
+VYp
diff --git a/tests/vimtests/visual/d_0.test b/tests/vimtests/visual/d_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/d_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobarbaz
+-- Output
+(1,2)
+fbaz
+-- Events
+lvlkkjl2ld
diff --git a/tests/vimtests/visual/d_1.test b/tests/vimtests/visual/d_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/d_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,1)
+
+-- Events
+v$d
diff --git a/tests/vimtests/visual/d_2.test b/tests/vimtests/visual/d_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/d_2.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,1)
+foo
+baz
+-- Events
+jVlld
diff --git a/tests/vimtests/visual/gq_0.test b/tests/vimtests/visual/gq_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/gq_0.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+foo
+bar
+baz
+-- Events
+Vgq
diff --git a/tests/vimtests/visual/gq_1.test b/tests/vimtests/visual/gq_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/gq_1.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+foo bar
+baz
+-- Events
+Vjgq
diff --git a/tests/vimtests/visual/indent_0.test b/tests/vimtests/visual/indent_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,5)
+    foo
+    bar
+-- Events
+vj>
diff --git a/tests/vimtests/visual/indent_1.test b/tests/vimtests/visual/indent_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_1.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(2,5)
+foo
+    bar
+    baz
+-- Events
+jVj>
diff --git a/tests/vimtests/visual/indent_10.test b/tests/vimtests/visual/indent_10.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_10.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+    foo
+    bar
+    baz
+    xyzzy
+-- Output
+(1,1)
+foo
+bar
+baz
+    xyzzy
+-- Events
+V2j<lt>
diff --git a/tests/vimtests/visual/indent_11.test b/tests/vimtests/visual/indent_11.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_11.test
@@ -0,0 +1,22 @@
+-- Input
+(1,1)
+
+def main():
+foo()
+bar()
+
+baz()
+quux()
+
+-- Output
+(3,5)
+
+def main():
+    foo()
+    bar()
+
+    baz()
+    quux()
+
+-- Events
+jjV}}>
diff --git a/tests/vimtests/visual/indent_12.test b/tests/vimtests/visual/indent_12.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_12.test
@@ -0,0 +1,22 @@
+-- Input
+(1,1)
+
+def main():
+foo()
+bar()
+
+baz()
+quux()
+
+-- Output
+(3,1)
+
+def main():
+    foo()
+    bar()
+
+    baz()
+    quux()
+
+-- Events
+jj<C-v>}}>
diff --git a/tests/vimtests/visual/indent_13.test b/tests/vimtests/visual/indent_13.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_13.test
@@ -0,0 +1,22 @@
+-- Input
+(1,1)
+
+def main():
+        foo()
+        bar()
+
+        baz()
+        quux()
+
+-- Output
+(3,1)
+
+def main():
+    foo()
+    bar()
+
+    baz()
+    quux()
+
+-- Events
+jj<C-v>}}<lt>
diff --git a/tests/vimtests/visual/indent_2.test b/tests/vimtests/visual/indent_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foo
+-- Output
+(1,13)
+            foo
+-- Events
+vl3>
diff --git a/tests/vimtests/visual/indent_3.test b/tests/vimtests/visual/indent_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_3.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+ foo
+-- Output
+(1,1)
+foo
+-- Events
+vl<lt>
diff --git a/tests/vimtests/visual/indent_4.test b/tests/vimtests/visual/indent_4.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_4.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,5)
+    foo
+bar
+baz
+-- Events
+V>
diff --git a/tests/vimtests/visual/indent_5.test b/tests/vimtests/visual/indent_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_5.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,5)
+    foo
+    bar
+baz
+-- Events
+Vj>
diff --git a/tests/vimtests/visual/indent_6.test b/tests/vimtests/visual/indent_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_6.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,5)
+    foo
+    bar
+    baz
+-- Events
+V2j>
diff --git a/tests/vimtests/visual/indent_7.test b/tests/vimtests/visual/indent_7.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_7.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,21)
+                    foo
+bar
+baz
+-- Events
+V5>
diff --git a/tests/vimtests/visual/indent_8.test b/tests/vimtests/visual/indent_8.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_8.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+  foo
+bar
+baz
+-- Output
+(1,1)
+foo
+bar
+baz
+-- Events
+V<lt>
diff --git a/tests/vimtests/visual/indent_9.test b/tests/vimtests/visual/indent_9.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/indent_9.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+baz
+-- Output
+(1,1)
+foo
+bar
+baz
+-- Events
+V>V<lt>
diff --git a/tests/vimtests/visual/m_0.test b/tests/vimtests/visual/m_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/m_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,2)
+foo
+br
+-- Events
+vljmavgg`ax
diff --git a/tests/vimtests/visual/m_1.test b/tests/vimtests/visual/m_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/m_1.test
@@ -0,0 +1,14 @@
+-- Input
+(1,1)
+1
+2
+3
+4
+-- Output
+(2,1)
+1
+2
+3
+4
+-- Events
+Vjmajjmb<Esc>'a
diff --git a/tests/vimtests/visual/o_0.test b/tests/vimtests/visual/o_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/o_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,4)
+fooar
+-- Events
+lv2lo2ld
diff --git a/tests/vimtests/visual/paste_line.test b/tests/vimtests/visual/paste_line.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/paste_line.test
@@ -0,0 +1,13 @@
+-- Input
+(1,1)
+foo
+bar
+
+-- Output
+(1,1)
+foo
+foo
+foo
+
+-- Events
+yyjVppgg0
diff --git a/tests/vimtests/visual/paste_multiline.test b/tests/vimtests/visual/paste_multiline.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/paste_multiline.test
@@ -0,0 +1,17 @@
+-- Input
+(1,1)
+foo
+bar
+123
+baz
+
+-- Output
+(1,1)
+foo
+bar
+foo
+bar
+baz
+
+-- Events
+Vjy3ggVpgg0
diff --git a/tests/vimtests/visual/paste_word.test b/tests/vimtests/visual/paste_word.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/paste_word.test
@@ -0,0 +1,10 @@
+-- Input
+(1,2)
+foo bar
+
+-- Output
+(1,1)
+foo foo
+
+-- Events
+viwywviwp0
diff --git a/tests/vimtests/visual/paste_word_2.test b/tests/vimtests/visual/paste_word_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/paste_word_2.test
@@ -0,0 +1,8 @@
+-- Input
+(1,2)
+foo bar baz
+-- Output
+(1,1)
+foo foo foo
+-- Events
+viwywviwpwviwp0
diff --git a/tests/vimtests/visual/r_0.test b/tests/vimtests/visual/r_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/r_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,1)
+aaaaaa
+-- Events
+Vra
diff --git a/tests/vimtests/visual/r_1.test b/tests/vimtests/visual/r_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/r_1.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,3)
+fox
+xxr
+-- Events
+jlvklrx
diff --git a/tests/vimtests/visual/r_2.test b/tests/vimtests/visual/r_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/r_2.test
@@ -0,0 +1,12 @@
+-- Input
+(1,7)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(1,7)
+Lorem XXXXXXXXXXXXXXXXXXXX
+XXXXXXX ghi
+qwe rty uiop
+-- Events
+vj^eerX
diff --git a/tests/vimtests/visual/switchcase_0.test b/tests/vimtests/visual/switchcase_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/switchcase_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,2)
+fOOBar
+-- Events
+lv2l~
diff --git a/tests/vimtests/visual/switchcase_1.test b/tests/vimtests/visual/switchcase_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/switchcase_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+FooBar
+-- Output
+(1,1)
+fOObAR
+-- Events
+V~
diff --git a/tests/vimtests/visual/u_0.test b/tests/vimtests/visual/u_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/u_0.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+TEST
+-- Output
+(1,1)
+test
+-- Events
+Vgu
diff --git a/tests/vimtests/visual/u_1.test b/tests/vimtests/visual/u_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/u_1.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+TeSt
+-- Output
+(1,1)
+teSt
+-- Events
+vlgu
diff --git a/tests/vimtests/visual/v3iwx.test b/tests/vimtests/visual/v3iwx.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/v3iwx.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+123 456 789
+-- Output
+(1,1)
+ 789
+-- Events
+v3iwx 
diff --git a/tests/vimtests/visual/viw.test b/tests/vimtests/visual/viw.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/viw.test
@@ -0,0 +1,8 @@
+-- Input
+(1,6)
+123 456 789
+-- Output
+(1,5)
+123  789
+-- Events
+viwx
diff --git a/tests/vimtests/visual/vlllx.test b/tests/vimtests/visual/vlllx.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/vlllx.test
@@ -0,0 +1,8 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(1,1)
+ar
+-- Events
+vlllx
diff --git a/tests/vimtests/visual/vx.test b/tests/vimtests/visual/vx.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/vx.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+Lorem ipsum dolor sit amet
+abc def ghi
+qwe rty uiop
+-- Output
+(2,2)
+Lorem ipsum dolor sit amet
+ac def ghi
+qwe rty uiop
+-- Events
+vx
diff --git a/tests/vimtests/visual/y_0.test b/tests/vimtests/visual/y_0.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_0.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foobar
+-- Output
+(3,1)
+foobar
+foobar
+foobar
+-- Events
+Vypp
diff --git a/tests/vimtests/visual/y_1.test b/tests/vimtests/visual/y_1.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_1.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,3)
+fooo
+baro
+bar
+-- Events
+lvjlyp
diff --git a/tests/vimtests/visual/y_2.test b/tests/vimtests/visual/y_2.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_2.test
@@ -0,0 +1,10 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,1)
+foo
+bar
+-- Events
+Vjlllypddxxxdd
diff --git a/tests/vimtests/visual/y_3.test b/tests/vimtests/visual/y_3.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_3.test
@@ -0,0 +1,12 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(2,1)
+foo
+foo
+bar
+bar
+-- Events
+Vjlllyp
diff --git a/tests/vimtests/visual/y_5.test b/tests/vimtests/visual/y_5.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_5.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,3)
+foo
+bar
+bar
+-- Events
+llvjypx
diff --git a/tests/vimtests/visual/y_6.test b/tests/vimtests/visual/y_6.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/visual/y_6.test
@@ -0,0 +1,11 @@
+-- Input
+(1,1)
+foo
+bar
+-- Output
+(1,4)
+fooo
+bar
+bar
+-- Events
+llvjyp
diff --git a/tests/vimtests/yank/yy.test b/tests/vimtests/yank/yy.test
new file mode 100644
--- /dev/null
+++ b/tests/vimtests/yank/yy.test
@@ -0,0 +1,12 @@
+-- Input
+(2,2)
+foo
+bar
+baz
+-- Output
+(2,2)
+foo
+bar
+baz
+-- Events
+yy
diff --git a/yi-keymap-vim.cabal b/yi-keymap-vim.cabal
--- a/yi-keymap-vim.cabal
+++ b/yi-keymap-vim.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           yi-keymap-vim
-version:        0.13.6
+version:        0.13.7
 synopsis:       Vim keymap for Yi editor
 category:       Yi
 homepage:       https://github.com/yi-editor/yi#readme
@@ -12,6 +12,471 @@
 license:        GPL-2
 build-type:     Simple
 cabal-version:  >= 1.10
+
+data-files:
+    tests/vimtests/blockvisual/0.test
+    tests/vimtests/blockvisual/8.test
+    tests/vimtests/blockvisual/9.test
+    tests/vimtests/blockvisual/block.test
+    tests/vimtests/blockvisual/block_d.test
+    tests/vimtests/blockvisual/block_d_1.test
+    tests/vimtests/blockvisual/block_d_2.test
+    tests/vimtests/blockvisual/capD_1.test
+    tests/vimtests/blockvisual/capD_2.test
+    tests/vimtests/blockvisual/capI.test
+    tests/vimtests/blockvisual/capU_2.test
+    tests/vimtests/blockvisual/commentblock.test
+    tests/vimtests/blockvisual/commentblock_1.test
+    tests/vimtests/blockvisual/commentblock_2.test
+    tests/vimtests/blockvisual/d.test
+    tests/vimtests/blockvisual/d_1.test
+    tests/vimtests/blockvisual/d_2.test
+    tests/vimtests/blockvisual/d_3.test
+    tests/vimtests/blockvisual/d_4.test
+    tests/vimtests/blockvisual/hl.test
+    tests/vimtests/blockvisual/o_1.test
+    tests/vimtests/blockvisual/o_2.test
+    tests/vimtests/blockvisual/o_3.test
+    tests/vimtests/blockvisual/o_4.test
+    tests/vimtests/blockvisual/o_5.test
+    tests/vimtests/blockvisual/o_6.test
+    tests/vimtests/blockvisual/paste_block.test
+    tests/vimtests/blockvisual/r_1.test
+    tests/vimtests/blockvisual/r_2.test
+    tests/vimtests/blockvisual/r_3.test
+    tests/vimtests/blockvisual/switchcase_2.test
+    tests/vimtests/blockvisual/u_2.test
+    tests/vimtests/blockvisual/y_10.test
+    tests/vimtests/blockvisual/y_11.test
+    tests/vimtests/blockvisual/y_12.test
+    tests/vimtests/blockvisual/y_13.test
+    tests/vimtests/blockvisual/y_14.test
+    tests/vimtests/blockvisual/y_15.test
+    tests/vimtests/blockvisual/y_3.test
+    tests/vimtests/blockvisual/y_4.test
+    tests/vimtests/blockvisual/y_7.test
+    tests/vimtests/blockvisual/y_8.test
+    tests/vimtests/blockvisual/y_9.test
+    tests/vimtests/change/c3l.test
+    tests/vimtests/change/C_part_of_line.test
+    tests/vimtests/change/C_whole_line.test
+    tests/vimtests/change/cc.test
+    tests/vimtests/change/ciw.test
+    tests/vimtests/change/S.test
+    tests/vimtests/change/s_eol.test
+    tests/vimtests/change/V3jc.test
+    tests/vimtests/delete/10dd.test
+    tests/vimtests/delete/2d3w.test
+    tests/vimtests/delete/2d3w_1.test
+    tests/vimtests/delete/2dd.test
+    tests/vimtests/delete/2dw..test
+    tests/vimtests/delete/2dw2..test
+    tests/vimtests/delete/2dw3..test
+    tests/vimtests/delete/C-u_1.test
+    tests/vimtests/delete/C-u_2.test
+    tests/vimtests/delete/capD.test
+    tests/vimtests/delete/capX.test
+    tests/vimtests/delete/capX_1.test
+    tests/vimtests/delete/d0.test
+    tests/vimtests/delete/d00.test
+    tests/vimtests/delete/d2G.test
+    tests/vimtests/delete/d2vd.test
+    tests/vimtests/delete/d2vd_1.test
+    tests/vimtests/delete/d3G.test
+    tests/vimtests/delete/d3vd.test
+    tests/vimtests/delete/d_capG.test
+    tests/vimtests/delete/d_capV_right_curly.test
+    tests/vimtests/delete/d_right_curly.test
+    tests/vimtests/delete/d_v_right_curly.test
+    tests/vimtests/delete/daw.test
+    tests/vimtests/delete/dd.test
+    tests/vimtests/delete/dd_1.test
+    tests/vimtests/delete/dd_2.test
+    tests/vimtests/delete/dd_3.test
+    tests/vimtests/delete/dd_4.test
+    tests/vimtests/delete/dd_5.test
+    tests/vimtests/delete/de.test
+    tests/vimtests/delete/diw.test
+    tests/vimtests/delete/dj.test
+    tests/vimtests/delete/dt.test
+    tests/vimtests/delete/dvd.test
+    tests/vimtests/delete/dve.test
+    tests/vimtests/delete/dVl.test
+    tests/vimtests/delete/dw_1.test
+    tests/vimtests/delete/ld3w.test
+    tests/vimtests/delete/ld3w_1.test
+    tests/vimtests/delete/ldw.test
+    tests/vimtests/delete/ldwdw.test
+    tests/vimtests/delete/spec_delete.test
+    tests/vimtests/delete/x.test
+    tests/vimtests/delete/x_1.test
+    tests/vimtests/digraphs/ae.test
+    tests/vimtests/digraphs/eacute.test
+    tests/vimtests/empty/empty.test
+    tests/vimtests/ex/empty.test
+    tests/vimtests/ex/esc.test
+    tests/vimtests/ex/esc_1.test
+    tests/vimtests/ex/fail.test
+    tests/vimtests/find/f.test
+    tests/vimtests/find/f1.test
+    tests/vimtests/find/f2.test
+    tests/vimtests/find/f3.test
+    tests/vimtests/find/f4.test
+    tests/vimtests/find/f5.test
+    tests/vimtests/find/f6.test
+    tests/vimtests/find/t.test
+    tests/vimtests/find/t1.test
+    tests/vimtests/find/t2.test
+    tests/vimtests/find/t3.test
+    tests/vimtests/find/t4.test
+    tests/vimtests/find/t5.test
+    tests/vimtests/find/t6.test
+    tests/vimtests/find/t7.test
+    tests/vimtests/format/break_line_in_word.test
+    tests/vimtests/format/indent.test
+    tests/vimtests/format/join_lines.test
+    tests/vimtests/format/long_blank_line.test
+    tests/vimtests/format/long_line.test
+    tests/vimtests/format/trailing_ws.test
+    tests/vimtests/indent/1.test
+    tests/vimtests/indent/2.test
+    tests/vimtests/indent/3.test
+    tests/vimtests/indent/4.test
+    tests/vimtests/indent/5.test
+    tests/vimtests/indent/6.test
+    tests/vimtests/indent/7.test
+    tests/vimtests/indent/8.test
+    tests/vimtests/indent/setpaste.test
+    tests/vimtests/insertion/2o.test
+    tests/vimtests/insertion/a.test
+    tests/vimtests/insertion/a2.test
+    tests/vimtests/insertion/a3.test
+    tests/vimtests/insertion/a4.test
+    tests/vimtests/insertion/a_on_empty_line.test
+    tests/vimtests/insertion/C-c_0.test
+    tests/vimtests/insertion/C-c_1.test
+    tests/vimtests/insertion/C-c_10.test
+    tests/vimtests/insertion/C-c_11.test
+    tests/vimtests/insertion/C-c_12.test
+    tests/vimtests/insertion/C-c_13.test
+    tests/vimtests/insertion/C-c_2.test
+    tests/vimtests/insertion/C-c_3.test
+    tests/vimtests/insertion/C-c_4.test
+    tests/vimtests/insertion/C-c_5.test
+    tests/vimtests/insertion/C-c_6.test
+    tests/vimtests/insertion/C-c_7.test
+    tests/vimtests/insertion/C-c_8.test
+    tests/vimtests/insertion/C-c_9.test
+    tests/vimtests/insertion/C-d_0.test
+    tests/vimtests/insertion/C-d_1.test
+    tests/vimtests/insertion/C-d_2.test
+    tests/vimtests/insertion/C-d_3.test
+    tests/vimtests/insertion/C-d_4.test
+    tests/vimtests/insertion/C-d_5.test
+    tests/vimtests/insertion/C-d_6.test
+    tests/vimtests/insertion/C-e_0.test
+    tests/vimtests/insertion/C-e_1.test
+    tests/vimtests/insertion/C-e_2.test
+    tests/vimtests/insertion/C-h_0.test
+    tests/vimtests/insertion/C-h_1.test
+    tests/vimtests/insertion/C-h_2.test
+    tests/vimtests/insertion/C-h_3.test
+    tests/vimtests/insertion/C-h_4.test
+    tests/vimtests/insertion/C-o_2.test
+    tests/vimtests/insertion/C-o_3.test
+    tests/vimtests/insertion/C-o_4.test
+    tests/vimtests/insertion/C-r_0.test
+    tests/vimtests/insertion/C-r_1.test
+    tests/vimtests/insertion/C-w_0.test
+    tests/vimtests/insertion/C-w_1.test
+    tests/vimtests/insertion/C-y_0.test
+    tests/vimtests/insertion/C-y_1.test
+    tests/vimtests/insertion/C-y_2.test
+    tests/vimtests/insertion/capA.test
+    tests/vimtests/insertion/capA2.test
+    tests/vimtests/insertion/capA3.test
+    tests/vimtests/insertion/capA4.test
+    tests/vimtests/insertion/capI.test
+    tests/vimtests/insertion/capI2.test
+    tests/vimtests/insertion/capI3.test
+    tests/vimtests/insertion/capO.test
+    tests/vimtests/insertion/counted_a.test
+    tests/vimtests/insertion/counted_capA.test
+    tests/vimtests/insertion/counted_capI.test
+    tests/vimtests/insertion/counted_capO.test
+    tests/vimtests/insertion/counted_i.test
+    tests/vimtests/insertion/counted_o.test
+    tests/vimtests/insertion/i.test
+    tests/vimtests/insertion/i2.test
+    tests/vimtests/insertion/i3.test
+    tests/vimtests/insertion/indent_0.test
+    tests/vimtests/insertion/indent_1.test
+    tests/vimtests/insertion/indent_2.test
+    tests/vimtests/insertion/indent_3.test
+    tests/vimtests/insertion/indent_4.test
+    tests/vimtests/insertion/indent_5.test
+    tests/vimtests/insertion/indent_6.test
+    tests/vimtests/insertion/indent_7.test
+    tests/vimtests/insertion/indent_8.test
+    tests/vimtests/insertion/nl_insert.test
+    tests/vimtests/insertion/o.test
+    tests/vimtests/insertion/o1.test
+    tests/vimtests/insertion/O2.test
+    tests/vimtests/insertion/o3.test
+    tests/vimtests/insertion/O4.test
+    tests/vimtests/insertion/onechar.test
+    tests/vimtests/insertion/spec_delete.test
+    tests/vimtests/insertion/spec_insert.test
+    tests/vimtests/joinlines/1.test
+    tests/vimtests/joinlines/2.test
+    tests/vimtests/joinlines/counted_1.test
+    tests/vimtests/joinlines/counted_2.test
+    tests/vimtests/jumplist/1.test
+    tests/vimtests/jumplist/2.test
+    tests/vimtests/macros/0.test
+    tests/vimtests/macros/1.test
+    tests/vimtests/macros/10.test
+    tests/vimtests/macros/11.test
+    tests/vimtests/macros/12.test
+    tests/vimtests/macros/13.test
+    tests/vimtests/macros/14.test
+    tests/vimtests/macros/15.test
+    tests/vimtests/macros/16.test
+    tests/vimtests/macros/2.test
+    tests/vimtests/macros/3.test
+    tests/vimtests/macros/4.test
+    tests/vimtests/macros/5.test
+    tests/vimtests/macros/6.test
+    tests/vimtests/macros/7.test
+    tests/vimtests/macros/8.test
+    tests/vimtests/macros/9.test
+    tests/vimtests/marks/unjump_backquote.test
+    tests/vimtests/marks/unjump_quote.test
+    tests/vimtests/marks/unjump_quote_blank.test
+    tests/vimtests/movement/empty.test
+    tests/vimtests/movement/empty_1.test
+    tests/vimtests/movement/eol_j.test
+    tests/vimtests/movement/eol_j2.test
+    tests/vimtests/movement/v_eol_j2.test
+    tests/vimtests/numbers/cursor_on_digits.test
+    tests/vimtests/numbers/decrement.test
+    tests/vimtests/numbers/hex_decrease.test
+    tests/vimtests/numbers/hex_increase.test
+    tests/vimtests/numbers/increment.test
+    tests/vimtests/numbers/no_numbers.test
+    tests/vimtests/numbers/oct_decrease.test
+    tests/vimtests/numbers/oct_hex_letters.test
+    tests/vimtests/numbers/oct_increase.test
+    tests/vimtests/numbers/sol_eol.test
+    tests/vimtests/paste/2dd_capP.test
+    tests/vimtests/paste/2dd_capP_1.test
+    tests/vimtests/paste/2ddp.test
+    tests/vimtests/paste/2ddp_1.test
+    tests/vimtests/paste/2yyp.test
+    tests/vimtests/paste/d2wp.test
+    tests/vimtests/paste/dbp.test
+    tests/vimtests/paste/dd_capP.test
+    tests/vimtests/paste/dd_capP_1.test
+    tests/vimtests/paste/ddjp.test
+    tests/vimtests/paste/ddkP.test
+    tests/vimtests/paste/ddp.test
+    tests/vimtests/paste/ddp_1.test
+    tests/vimtests/paste/dep.test
+    tests/vimtests/paste/dw_capP.test
+    tests/vimtests/paste/dwp.test
+    tests/vimtests/paste/p_at_newline.test
+    tests/vimtests/paste/p_at_newline2.test
+    tests/vimtests/paste/visual.test
+    tests/vimtests/paste/y_1.test
+    tests/vimtests/paste/y_2.test
+    tests/vimtests/paste/y_3.test
+    tests/vimtests/paste/yep.test
+    tests/vimtests/paste/yjp.test
+    tests/vimtests/paste/Yp.test
+    tests/vimtests/paste/ywp.test
+    tests/vimtests/paste/yy_capP.test
+    tests/vimtests/paste/yyp.test
+    tests/vimtests/repeat/2r.test
+    tests/vimtests/repeat/a.test
+    tests/vimtests/repeat/a2.test
+    tests/vimtests/repeat/a3.test
+    tests/vimtests/repeat/a4.test
+    tests/vimtests/repeat/a5.test
+    tests/vimtests/repeat/capA.test
+    tests/vimtests/repeat/capA2.test
+    tests/vimtests/repeat/capA3.test
+    tests/vimtests/repeat/capA4.test
+    tests/vimtests/repeat/capC.test
+    tests/vimtests/repeat/capI.test
+    tests/vimtests/repeat/capI2.test
+    tests/vimtests/repeat/capI3.test
+    tests/vimtests/repeat/capI4.test
+    tests/vimtests/repeat/capO.test
+    tests/vimtests/repeat/capO2.test
+    tests/vimtests/repeat/capO3.test
+    tests/vimtests/repeat/capX.test
+    tests/vimtests/repeat/capX_1.test
+    tests/vimtests/repeat/counted_2r.test
+    tests/vimtests/repeat/dw_capP.test
+    tests/vimtests/repeat/dwp.test
+    tests/vimtests/repeat/i.test
+    tests/vimtests/repeat/i2.test
+    tests/vimtests/repeat/i3.test
+    tests/vimtests/repeat/i4.test
+    tests/vimtests/repeat/o.test
+    tests/vimtests/repeat/o1.test
+    tests/vimtests/repeat/o2.test
+    tests/vimtests/repeat/o3.test
+    tests/vimtests/repeat/r.test
+    tests/vimtests/repeat/r_1.test
+    tests/vimtests/repeat/r_2.test
+    tests/vimtests/repeat/r_3.test
+    tests/vimtests/repeat/tilde_repeat.test
+    tests/vimtests/repeat/tilde_repeat_does_not_affect_other_lines.test
+    tests/vimtests/repeat/x.test
+    tests/vimtests/repeat/x_1.test
+    tests/vimtests/repeat/x_2.test
+    tests/vimtests/replace/0.test
+    tests/vimtests/replace/1.test
+    tests/vimtests/replace/10.test
+    tests/vimtests/replace/11.test
+    tests/vimtests/replace/2.test
+    tests/vimtests/replace/3.test
+    tests/vimtests/replace/4.test
+    tests/vimtests/replace/5.test
+    tests/vimtests/replace/6.test
+    tests/vimtests/replace/7.test
+    tests/vimtests/replace/8.test
+    tests/vimtests/replace/9.test
+    tests/vimtests/search/1.test
+    tests/vimtests/search/2.test
+    tests/vimtests/search/3.test
+    tests/vimtests/search/4.test
+    tests/vimtests/search/5.test
+    tests/vimtests/search/6.test
+    tests/vimtests/search/7.test
+    tests/vimtests/search/8.test
+    tests/vimtests/search/9.test
+    tests/vimtests/search/counted_1.test
+    tests/vimtests/search/counted_2.test
+    tests/vimtests/search/counted_3.test
+    tests/vimtests/search/counted_capN_1.test
+    tests/vimtests/search/counted_capN_2.test
+    tests/vimtests/search/counted_n_1.test
+    tests/vimtests/search/counted_n_2.test
+    tests/vimtests/search/counted_n_3.test
+    tests/vimtests/search/history1.test
+    tests/vimtests/search/history2.test
+    tests/vimtests/search/history3.test
+    tests/vimtests/search/history4.test
+    tests/vimtests/searchword/g_pound.test
+    tests/vimtests/searchword/g_repeat_pound.test
+    tests/vimtests/searchword/g_repeat_pound_1.test
+    tests/vimtests/searchword/g_repeat_star.test
+    tests/vimtests/searchword/g_star.test
+    tests/vimtests/searchword/pound.test
+    tests/vimtests/searchword/repeat_pound.test
+    tests/vimtests/searchword/repeat_star.test
+    tests/vimtests/searchword/star.test
+    tests/vimtests/searchword/star_2.test
+    tests/vimtests/sort/1.test
+    tests/vimtests/sort/2.test
+    tests/vimtests/sort/3.test
+    tests/vimtests/sort/4.test
+    tests/vimtests/sort/5.test
+    tests/vimtests/switchcase/g_capU.test
+    tests/vimtests/switchcase/gtilde.test
+    tests/vimtests/switchcase/gtilde_1.test
+    tests/vimtests/switchcase/gu.test
+    tests/vimtests/switchcase/tilde_does_not_cross_lines.test
+    tests/vimtests/switchcase/tilde_left_over_count_at_eol_is_ignored.test
+    tests/vimtests/switchcase/tilde_near_eol.test
+    tests/vimtests/switchcase/tilde_no_count.test
+    tests/vimtests/switchcase/tilde_with_count.test
+    tests/vimtests/undo/1.test
+    tests/vimtests/undo/2.test
+    tests/vimtests/undo/3.test
+    tests/vimtests/undo/4.test
+    tests/vimtests/undo/5.test
+    tests/vimtests/undo/6.test
+    tests/vimtests/undo/7.test
+    tests/vimtests/undo/8.test
+    tests/vimtests/undo/9.test
+    tests/vimtests/unicode/chinese-simp.test
+    tests/vimtests/unicode/chinese-trad.test
+    tests/vimtests/unicode/russian.test
+    tests/vimtests/unsorted/2yy.test
+    tests/vimtests/unsorted/v3lcABC.test
+    tests/vimtests/visual/1.test
+    tests/vimtests/visual/10.test
+    tests/vimtests/visual/11.test
+    tests/vimtests/visual/12.test
+    tests/vimtests/visual/13.test
+    tests/vimtests/visual/14.test
+    tests/vimtests/visual/15.test
+    tests/vimtests/visual/2.test
+    tests/vimtests/visual/3.test
+    tests/vimtests/visual/4.test
+    tests/vimtests/visual/6.test
+    tests/vimtests/visual/7.test
+    tests/vimtests/visual/A_0.test
+    tests/vimtests/visual/A_1.test
+    tests/vimtests/visual/A_2.test
+    tests/vimtests/visual/A_3.test
+    tests/vimtests/visual/capD_0.test
+    tests/vimtests/visual/capD_1.test
+    tests/vimtests/visual/capD_2.test
+    tests/vimtests/visual/capU_0.test
+    tests/vimtests/visual/capU_1.test
+    tests/vimtests/visual/capY_0.test
+    tests/vimtests/visual/CSs.test
+    tests/vimtests/visual/d_0.test
+    tests/vimtests/visual/d_1.test
+    tests/vimtests/visual/d_2.test
+    tests/vimtests/visual/gq_0.test
+    tests/vimtests/visual/gq_1.test
+    tests/vimtests/visual/I_0.test
+    tests/vimtests/visual/I_1.test
+    tests/vimtests/visual/indent_0.test
+    tests/vimtests/visual/indent_1.test
+    tests/vimtests/visual/indent_10.test
+    tests/vimtests/visual/indent_11.test
+    tests/vimtests/visual/indent_12.test
+    tests/vimtests/visual/indent_13.test
+    tests/vimtests/visual/indent_2.test
+    tests/vimtests/visual/indent_3.test
+    tests/vimtests/visual/indent_4.test
+    tests/vimtests/visual/indent_5.test
+    tests/vimtests/visual/indent_6.test
+    tests/vimtests/visual/indent_7.test
+    tests/vimtests/visual/indent_8.test
+    tests/vimtests/visual/indent_9.test
+    tests/vimtests/visual/m_0.test
+    tests/vimtests/visual/m_1.test
+    tests/vimtests/visual/o_0.test
+    tests/vimtests/visual/paste_line.test
+    tests/vimtests/visual/paste_multiline.test
+    tests/vimtests/visual/paste_word.test
+    tests/vimtests/visual/paste_word_2.test
+    tests/vimtests/visual/r_0.test
+    tests/vimtests/visual/r_1.test
+    tests/vimtests/visual/r_2.test
+    tests/vimtests/visual/switchcase_0.test
+    tests/vimtests/visual/switchcase_1.test
+    tests/vimtests/visual/u_0.test
+    tests/vimtests/visual/u_1.test
+    tests/vimtests/visual/v3iwx.test
+    tests/vimtests/visual/Vd.test
+    tests/vimtests/visual/viw.test
+    tests/vimtests/visual/vlllx.test
+    tests/vimtests/visual/vx.test
+    tests/vimtests/visual/y_0.test
+    tests/vimtests/visual/y_1.test
+    tests/vimtests/visual/y_2.test
+    tests/vimtests/visual/y_3.test
+    tests/vimtests/visual/y_5.test
+    tests/vimtests/visual/y_6.test
+    tests/vimtests/yank/yy.test
 
 source-repository head
   type: git
