test_regex_char_classes.vim 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. " Tests for regexp with backslash and other special characters inside []
  2. " Also test backslash for hex/octal numbered character.
  3. "
  4. scriptencoding utf-8
  5. function RunSTest(value, calls, expected)
  6. new
  7. call feedkeys("i" . a:value, "mx")
  8. exec a:calls
  9. call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:calls))
  10. quit!
  11. endfunction
  12. function RunXTest(value, search_exp, expected)
  13. new
  14. call feedkeys("i" . a:value, "mx")
  15. call feedkeys("gg" . a:search_exp . "\nx", "mx")
  16. call assert_equal(a:expected, getline(1), printf("wrong result for %s", a:search_exp))
  17. quit!
  18. endfunction
  19. function Test_x_search()
  20. let res = "test text test text"
  21. call RunXTest("test \\text test text", "/[\\x]", res)
  22. call RunXTest("test \ttext test text", "/[\\t\\]]", res)
  23. call RunXTest("test text ]test text", "/[]y]", res)
  24. call RunXTest("test ]text test text", "/[\\]]", res)
  25. call RunXTest("test text te^st text", "/[y^]", res)
  26. call RunXTest("test te$xt test text", "/[$y]", res)
  27. call RunXTest("test taext test text", "/[\\x61]", res)
  28. call RunXTest("test tbext test text","/[\\x60-\\x64]", res)
  29. call RunXTest("test 5text test text","/[\\x785]", res)
  30. call RunXTest("testc text test text","/[\\o143]", res)
  31. call RunXTest("tesdt text test text","/[\\o140-\\o144]", res)
  32. call RunXTest("test7 text test text", "/[\\o417]", res)
  33. call RunXTest("test text tBest text", "/\\%x42", res)
  34. call RunXTest("test text teCst text", "/\\%o103", res)
  35. call RunXTest("test text \<C-V>x00test text", "/[\\x00]", res)
  36. endfunction
  37. function Test_s_search()
  38. let res = "test text test text"
  39. call RunSTest("test te\<C-V>x00xt t\<C-V>x04est t\<C-V>x10ext", "s/[\\x00-\\x10]//g", res)
  40. call RunSTest("test \\xyztext test text", "s/[\\x-z]\\+//", res)
  41. call RunSTest("test text tev\\uyst text", "s/[\\u-z]\\{2,}//", res)
  42. call RunSTest("xx aaaaa xx a", "s/\\(a\\)\\+//", "xx xx a")
  43. call RunSTest("xx aaaaa xx a", "s/\\(a*\\)\\+//", "xx aaaaa xx a")
  44. call RunSTest("xx aaaaa xx a", "s/\\(a*\\)*//", "xx aaaaa xx a")
  45. call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{2,3}/A/", "xx Aaa xx")
  46. call RunSTest("xx aaaaa xx", "s/\\(a\\)\\{-2,3}/A/", "xx Aaaa xx")
  47. call RunSTest("xx aaa12aa xx", "s/\\(a\\)*\\(12\\)\\@>/A/", "xx Aaa xx")
  48. call RunSTest("xx foobar xbar xx", "s/\\(foo\\)\\@<!bar/A/", "xx foobar xA xx")
  49. call RunSTest("xx an file xx", "s/\\(an\\_s\\+\\)\\@<=file/A/", "xx an A xx")
  50. call RunSTest("x= 9;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/XX/", "XX 9;")
  51. call RunSTest("hh= 77;", "s/^\\(\\h\\w*\\%(->\\|\\.\\)\\=\\)\\+=/YY/", "YY 77;")
  52. call RunSTest(" aaa ", "s/aaa/xyz/", " xyz ")
  53. call RunSTest(" xyz", "s/~/bcd/", " bcd")
  54. call RunSTest(" bcdbcdbcd", "s/~\\+/BB/", " BB")
  55. endfunction
  56. " Test character classes in regexp using regexpengine 0, 1, 2.
  57. func Test_regex_char_classes()
  58. new
  59. let save_enc = &encoding
  60. set encoding=utf-8
  61. let input = "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"
  62. " Format is [cmd_to_run, expected_output]
  63. let tests = [
  64. \ [':s/\%#=0\d//g',
  65. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  66. \ [':s/\%#=1\d//g',
  67. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  68. \ [':s/\%#=2\d//g',
  69. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  70. \ [':s/\%#=0[0-9]//g',
  71. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  72. \ [':s/\%#=1[0-9]//g',
  73. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  74. \ [':s/\%#=2[0-9]//g',
  75. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  76. \ [':s/\%#=0\D//g',
  77. \ "0123456789"],
  78. \ [':s/\%#=1\D//g',
  79. \ "0123456789"],
  80. \ [':s/\%#=2\D//g',
  81. \ "0123456789"],
  82. \ [':s/\%#=0[^0-9]//g',
  83. \ "0123456789"],
  84. \ [':s/\%#=1[^0-9]//g',
  85. \ "0123456789"],
  86. \ [':s/\%#=2[^0-9]//g',
  87. \ "0123456789"],
  88. \ [':s/\%#=0\o//g',
  89. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  90. \ [':s/\%#=1\o//g',
  91. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  92. \ [':s/\%#=2\o//g',
  93. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  94. \ [':s/\%#=0[0-7]//g',
  95. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  96. \ [':s/\%#=1[0-7]//g',
  97. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  98. \ [':s/\%#=2[0-7]//g',
  99. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  100. \ [':s/\%#=0\O//g',
  101. \ "01234567"],
  102. \ [':s/\%#=1\O//g',
  103. \ "01234567"],
  104. \ [':s/\%#=2\O//g',
  105. \ "01234567"],
  106. \ [':s/\%#=0[^0-7]//g',
  107. \ "01234567"],
  108. \ [':s/\%#=1[^0-7]//g',
  109. \ "01234567"],
  110. \ [':s/\%#=2[^0-7]//g',
  111. \ "01234567"],
  112. \ [':s/\%#=0\x//g',
  113. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  114. \ [':s/\%#=1\x//g',
  115. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  116. \ [':s/\%#=2\x//g',
  117. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  118. \ [':s/\%#=0[0-9A-Fa-f]//g',
  119. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  120. \ [':s/\%#=1[0-9A-Fa-f]//g',
  121. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  122. \ [':s/\%#=2[0-9A-Fa-f]//g',
  123. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  124. \ [':s/\%#=0\X//g',
  125. \ "0123456789ABCDEFabcdef"],
  126. \ [':s/\%#=1\X//g',
  127. \ "0123456789ABCDEFabcdef"],
  128. \ [':s/\%#=2\X//g',
  129. \ "0123456789ABCDEFabcdef"],
  130. \ [':s/\%#=0[^0-9A-Fa-f]//g',
  131. \ "0123456789ABCDEFabcdef"],
  132. \ [':s/\%#=1[^0-9A-Fa-f]//g',
  133. \ "0123456789ABCDEFabcdef"],
  134. \ [':s/\%#=2[^0-9A-Fa-f]//g',
  135. \ "0123456789ABCDEFabcdef"],
  136. \ [':s/\%#=0\w//g',
  137. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  138. \ [':s/\%#=1\w//g',
  139. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  140. \ [':s/\%#=2\w//g',
  141. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  142. \ [':s/\%#=0[0-9A-Za-z_]//g',
  143. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  144. \ [':s/\%#=1[0-9A-Za-z_]//g',
  145. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  146. \ [':s/\%#=2[0-9A-Za-z_]//g',
  147. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  148. \ [':s/\%#=0\W//g',
  149. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  150. \ [':s/\%#=1\W//g',
  151. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  152. \ [':s/\%#=2\W//g',
  153. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  154. \ [':s/\%#=0[^0-9A-Za-z_]//g',
  155. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  156. \ [':s/\%#=1[^0-9A-Za-z_]//g',
  157. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  158. \ [':s/\%#=2[^0-9A-Za-z_]//g',
  159. \ "0123456789ABCDEFGHIXYZ_abcdefghiwxyz"],
  160. \ [':s/\%#=0\h//g',
  161. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  162. \ [':s/\%#=1\h//g',
  163. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  164. \ [':s/\%#=2\h//g',
  165. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  166. \ [':s/\%#=0[A-Za-z_]//g',
  167. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  168. \ [':s/\%#=1[A-Za-z_]//g',
  169. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  170. \ [':s/\%#=2[A-Za-z_]//g',
  171. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  172. \ [':s/\%#=0\H//g',
  173. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  174. \ [':s/\%#=1\H//g',
  175. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  176. \ [':s/\%#=2\H//g',
  177. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  178. \ [':s/\%#=0[^A-Za-z_]//g',
  179. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  180. \ [':s/\%#=1[^A-Za-z_]//g',
  181. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  182. \ [':s/\%#=2[^A-Za-z_]//g',
  183. \ "ABCDEFGHIXYZ_abcdefghiwxyz"],
  184. \ [':s/\%#=0\a//g',
  185. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  186. \ [':s/\%#=1\a//g',
  187. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  188. \ [':s/\%#=2\a//g',
  189. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  190. \ [':s/\%#=0[A-Za-z]//g',
  191. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  192. \ [':s/\%#=1[A-Za-z]//g',
  193. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  194. \ [':s/\%#=2[A-Za-z]//g',
  195. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  196. \ [':s/\%#=0\A//g',
  197. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  198. \ [':s/\%#=1\A//g',
  199. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  200. \ [':s/\%#=2\A//g',
  201. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  202. \ [':s/\%#=0[^A-Za-z]//g',
  203. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  204. \ [':s/\%#=1[^A-Za-z]//g',
  205. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  206. \ [':s/\%#=2[^A-Za-z]//g',
  207. \ "ABCDEFGHIXYZabcdefghiwxyz"],
  208. \ [':s/\%#=0\l//g',
  209. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  210. \ [':s/\%#=1\l//g',
  211. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  212. \ [':s/\%#=2\l//g',
  213. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  214. \ [':s/\%#=0[a-z]//g',
  215. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  216. \ [':s/\%#=1[a-z]//g',
  217. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  218. \ [':s/\%#=2[a-z]//g',
  219. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  220. \ [':s/\%#=0\L//g',
  221. \ "abcdefghiwxyz"],
  222. \ [':s/\%#=1\L//g',
  223. \ "abcdefghiwxyz"],
  224. \ [':s/\%#=2\L//g',
  225. \ "abcdefghiwxyz"],
  226. \ [':s/\%#=0[^a-z]//g',
  227. \ "abcdefghiwxyz"],
  228. \ [':s/\%#=1[^a-z]//g',
  229. \ "abcdefghiwxyz"],
  230. \ [':s/\%#=2[^a-z]//g',
  231. \ "abcdefghiwxyz"],
  232. \ [':s/\%#=0\u//g',
  233. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  234. \ [':s/\%#=1\u//g',
  235. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  236. \ [':s/\%#=2\u//g',
  237. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  238. \ [':s/\%#=0[A-Z]//g',
  239. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  240. \ [':s/\%#=1[A-Z]//g',
  241. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  242. \ [':s/\%#=2[A-Z]//g',
  243. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  244. \ [':s/\%#=0\U//g',
  245. \ "ABCDEFGHIXYZ"],
  246. \ [':s/\%#=1\U//g',
  247. \ "ABCDEFGHIXYZ"],
  248. \ [':s/\%#=2\U//g',
  249. \ "ABCDEFGHIXYZ"],
  250. \ [':s/\%#=0[^A-Z]//g',
  251. \ "ABCDEFGHIXYZ"],
  252. \ [':s/\%#=1[^A-Z]//g',
  253. \ "ABCDEFGHIXYZ"],
  254. \ [':s/\%#=2[^A-Z]//g',
  255. \ "ABCDEFGHIXYZ"],
  256. \ [':s/\%#=0\%' . line('.') . 'l^\t...//g',
  257. \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  258. \ [':s/\%#=1\%' . line('.') . 'l^\t...//g',
  259. \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  260. \ [':s/\%#=2\%' . line('.') . 'l^\t...//g',
  261. \ "!\"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  262. \ [':s/\%#=0[0-z]//g',
  263. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  264. \ [':s/\%#=1[0-z]//g',
  265. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  266. \ [':s/\%#=2[0-z]//g',
  267. \ "\t\<C-L>\<C-M> !\"#$%&'()#+'-./{|}~\<C-?>\u0080\u0082\u0090\u009b¦±¼ÇÓé"],
  268. \ [':s/\%#=0[^0-z]//g',
  269. \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
  270. \ [':s/\%#=1[^0-z]//g',
  271. \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"],
  272. \ [':s/\%#=2[^0-z]//g',
  273. \ "0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz"]
  274. \]
  275. for [cmd, expected] in tests
  276. call append(0, input)
  277. call cursor(1, 1)
  278. exe cmd
  279. call assert_equal(expected, getline(1), cmd)
  280. endfor
  281. let &encoding = save_enc
  282. enew!
  283. close
  284. endfunc
  285. " vim: shiftwidth=2 sts=2 expandtab