1" Test for 'scrollbind' causing an unexpected scroll of one of the windows. 2 3func Test_scrollbind() 4 " We don't want the status line to cause problems: 5 set laststatus=0 6 let totalLines = &lines * 20 7 let middle = totalLines / 2 8 new | only 9 for i in range(1, totalLines) 10 call setline(i, 'LINE ' . i) 11 endfor 12 exe string(middle) 13 normal zt 14 normal M 15 aboveleft vert new 16 for i in range(1, totalLines) 17 call setline(i, 'line ' . i) 18 endfor 19 exe string(middle) 20 normal zt 21 normal M 22 " Execute the following two commands at once to reproduce the problem. 23 setl scb | wincmd p 24 setl scb 25 wincmd w 26 let topLineLeft = line('w0') 27 wincmd p 28 let topLineRight = line('w0') 29 setl noscrollbind 30 wincmd p 31 setl noscrollbind 32 call assert_equal(0, topLineLeft - topLineRight) 33endfunc 34 35" Test for 'scrollbind' 36func Test_scrollbind_opt() 37 new | only 38 set noscrollbind 39 set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow 40 41 " Insert the text used for the test 42 append 43 44 45start of window 1 46. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01 47. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02 48. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03 49. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04 50. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05 51. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06 52. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07 53. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08 54. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09 55. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10 56. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11 57. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12 58. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13 59. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14 60. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15 61end of window 1 62 63 64start of window 2 65. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01 66. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02 67. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03 68. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04 69. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05 70. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06 71. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07 72. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08 73. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09 74. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10 75. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11 76. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12 77. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13 78. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14 79. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15 80. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16 81end of window 2 82 83. 84 85 " Test using two windows open to one buffer, one extra empty window 86 split 87 new 88 wincmd t 89 resize 8 90 call search('^start of window 1$') 91 normal zt 92 set scrollbind 93 wincmd j 94 resize 7 95 call search('^start of window 2$') 96 normal zt 97 set scrollbind 98 99 " -- start of tests -- 100 " Test scrolling down 101 normal L5jHyy 102 wincmd b | normal pr0 103 wincmd t | normal Hyy 104 wincmd b | normal pr1 105 wincmd t | normal L6jHyy 106 wincmd b | normal pr2 107 wincmd k | normal Hyy 108 wincmd b | normal pr3 109 110 " Test scrolling up 111 wincmd t | normal H4k 112 wincmd j | normal H 113 wincmd t | normal Hyy 114 wincmd b | normal pr4 115 wincmd k | normal Hyy 116 wincmd b | normal pr5 117 wincmd k | normal 3k 118 wincmd t | normal H 119 wincmd j | normal Hyy 120 wincmd b | normal pr6 121 wincmd t | normal Hyy 122 wincmd b | normal pr7 123 124 " Test horizontal scrolling 125 set scrollopt+=hor 126 normal gg"zyyG"zpG 127 wincmd t | normal 015zly$ 128 wincmd b | normal p"zpG 129 wincmd k | normal y$ 130 wincmd b | normal p"zpG 131 wincmd k | normal 10jH7zhg0y$ 132 wincmd b | normal p"zpG 133 wincmd t | normal Hg0y$ 134 wincmd b | normal p"zpG 135 set scrollopt-=hor 136 137 wincmd b 138 call assert_equal([ 139 \ '', 140 \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05', 141 \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05', 142 \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', 143 \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', 144 \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06', 145 \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06', 146 \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02', 147 \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', 148 \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', 149 \ 'UTSRQPONMLKJIHGREDCBA9876543210 02', 150 \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', 151 \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', 152 \ ''], getline(1, '$')) 153 enew! 154 155 " ****** tests using two different buffers ***** 156 wincmd t | wincmd j | close 157 wincmd t | set noscrollbind 158 /start of window 2$/,/^end of window 2$/y 159 new 160 wincmd t | wincmd j | normal 4"zpGp 161 wincmd t 162 call search('^start of window 1$') 163 normal zt 164 set scrollbind 165 wincmd j 166 call search('^start of window 2$') 167 normal zt 168 set scrollbind 169 170 " -- start of tests -- 171 " Test scrolling down 172 normal L5jHyy 173 wincmd b | normal pr0 174 wincmd t | normal Hyy 175 wincmd b | normal pr1 176 wincmd t | normal L6jHyy 177 wincmd b | normal pr2 178 wincmd k | normal Hyy 179 wincmd b | normal pr3 180 181 " Test scrolling up 182 wincmd t | normal H4k 183 wincmd j | normal H 184 wincmd t | normal Hyy 185 wincmd b | normal pr4 186 wincmd k | normal Hyy 187 wincmd b | normal pr5 188 wincmd k | normal 3k 189 wincmd t | normal H 190 wincmd j | normal Hyy 191 wincmd b | normal pr6 192 wincmd t | normal Hyy 193 wincmd b | normal pr7 194 195 " Test horizontal scrolling 196 set scrollopt+=hor 197 normal gg"zyyG"zpG 198 wincmd t | normal 015zly$ 199 wincmd b | normal p"zpG 200 wincmd k | normal y$ 201 wincmd b | normal p"zpG 202 wincmd k | normal 10jH7zhg0y$ 203 wincmd b | normal p"zpG 204 wincmd t | normal Hg0y$ 205 wincmd b | normal p"zpG 206 set scrollopt-=hor 207 208 wincmd b 209 call assert_equal([ 210 \ '', 211 \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05', 212 \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05', 213 \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', 214 \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', 215 \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06', 216 \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06', 217 \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02', 218 \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', 219 \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', 220 \ 'UTSRQPONMLKJIHGREDCBA9876543210 02', 221 \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', 222 \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', 223 \ ''], getline(1, '$')) 224 enew! 225 226 " Test 'syncbind' 227 wincmd t | set noscrollbind | normal ggL 228 wincmd j | set noscrollbind | normal ggL 229 set scrollbind 230 wincmd t | set scrollbind | normal G 231 wincmd j | normal G 232 syncbind 233 normal Hk 234 wincmd t | normal H 235 wincmd j | normal Hyy 236 wincmd b | normal p 237 wincmd t | normal yy 238 wincmd b | normal p 239 wincmd t | set noscrollbind | normal ggL 240 wincmd j | set noscrollbind 241 normal ggL 242 set scrollbind 243 wincmd t | set scrollbind 244 wincmd t | normal G 245 wincmd j | normal G 246 wincmd t | syncbind | normal Hk 247 wincmd j | normal H 248 wincmd t | normal Hyy 249 wincmd b | normal p 250 wincmd t | wincmd j | normal yy 251 wincmd b | normal p 252 wincmd t | normal H3k 253 wincmd j | normal H 254 wincmd t | normal Hyy 255 wincmd b | normal p 256 wincmd t | wincmd j | normal yy 257 wincmd b | normal p 258 259 wincmd b 260 call assert_equal([ 261 \ '', 262 \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16', 263 \ 'start of window 2', 264 \ 'start of window 2', 265 \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16', 266 \ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15', 267 \ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12', 268 \ ], getline(1, '$')) 269 enew! 270 271 new | only! 272 set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow& 273endfunc 274 275" vim: shiftwidth=2 sts=2 expandtab 276