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