test_packadd.vim (18472B)
1 " Tests for 'packpath' and :packadd 2 3 4 func SetUp() 5 let s:topdir = getcwd() . '/Xdir' 6 exe 'set packpath=' . s:topdir 7 let s:plugdir = s:topdir . '/pack/mine/opt/mytest' 8 endfunc 9 10 func TearDown() 11 call delete(s:topdir, 'rf') 12 endfunc 13 14 func Test_packadd() 15 if !exists('s:plugdir') 16 echomsg 'when running this test manually, call SetUp() first' 17 return 18 endif 19 20 call mkdir(s:plugdir . '/plugin/also', 'p') 21 call mkdir(s:plugdir . '/ftdetect', 'p') 22 call mkdir(s:plugdir . '/after', 'p') 23 24 " This used to crash Vim 25 let &rtp = 'nosuchdir,' . s:plugdir . '/after' 26 packadd mytest 27 " plugdir should be inserted before plugdir/after 28 call assert_match('^nosuchdir,' . s:plugdir . ',', &rtp) 29 30 set rtp& 31 let rtp = &rtp 32 filetype on 33 34 let rtp_entries = split(rtp, ',') 35 for entry in rtp_entries 36 if entry =~? '\<after\>' 37 let first_after_entry = entry 38 break 39 endif 40 endfor 41 42 exe 'split ' . s:plugdir . '/plugin/test.vim' 43 call setline(1, 'let g:plugin_works = 42') 44 wq 45 46 exe 'split ' . s:plugdir . '/plugin/also/loaded.vim' 47 call setline(1, 'let g:plugin_also_works = 77') 48 wq 49 50 exe 'split ' . s:plugdir . '/ftdetect/test.vim' 51 call setline(1, 'let g:ftdetect_works = 17') 52 wq 53 54 packadd mytest 55 56 call assert_equal(42, g:plugin_works) 57 call assert_equal(77, g:plugin_also_works) 58 call assert_equal(17, g:ftdetect_works) 59 call assert_true(len(&rtp) > len(rtp)) 60 call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp) 61 62 let new_after = match(&rtp, '/testdir/Xdir/pack/mine/opt/mytest/after,') 63 let forwarded = substitute(first_after_entry, '\\', '[/\\\\]', 'g') 64 let old_after = match(&rtp, ',' . forwarded . '\>') 65 call assert_true(new_after > 0, 'rtp is ' . &rtp) 66 call assert_true(old_after > 0, 'match ' . forwarded . ' in ' . &rtp) 67 call assert_true(new_after < old_after, 'rtp is ' . &rtp) 68 69 " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest' 70 call mkdir(fnamemodify(s:plugdir, ':h') . '/myte', 'p') 71 let rtp = &rtp 72 packadd myte 73 74 " Check the path of 'myte' is added 75 call assert_true(len(&rtp) > len(rtp)) 76 call assert_match('/testdir/Xdir/pack/mine/opt/myte\($\|,\)', &rtp) 77 78 " Check exception 79 call assert_fails("packadd directorynotfound", 'E919:') 80 call assert_fails("packadd", 'E471:') 81 endfunc 82 83 func Test_packadd_start() 84 let plugdir = s:topdir . '/pack/mine/start/other' 85 call mkdir(plugdir . '/plugin', 'p') 86 set rtp& 87 let rtp = &rtp 88 filetype on 89 90 exe 'split ' . plugdir . '/plugin/test.vim' 91 call setline(1, 'let g:plugin_works = 24') 92 wq 93 94 packadd other 95 96 call assert_equal(24, g:plugin_works) 97 call assert_true(len(&rtp) > len(rtp)) 98 call assert_match('/testdir/Xdir/pack/mine/start/other\($\|,\)', &rtp) 99 endfunc 100 101 func Test_packadd_noload() 102 call mkdir(s:plugdir . '/plugin', 'p') 103 call mkdir(s:plugdir . '/syntax', 'p') 104 set rtp& 105 let rtp = &rtp 106 107 exe 'split ' . s:plugdir . '/plugin/test.vim' 108 call setline(1, 'let g:plugin_works = 42') 109 wq 110 let g:plugin_works = 0 111 112 packadd! mytest 113 114 call assert_true(len(&rtp) > len(rtp)) 115 call assert_match('testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp) 116 call assert_equal(0, g:plugin_works) 117 118 " check the path is not added twice 119 let new_rtp = &rtp 120 packadd! mytest 121 call assert_equal(new_rtp, &rtp) 122 endfunc 123 124 func Test_packadd_symlink_dir() 125 if !has('unix') 126 return 127 endif 128 let top2_dir = s:topdir . '/Xdir2' 129 let real_dir = s:topdir . '/Xsym' 130 call mkdir(real_dir, 'p') 131 exec "silent !ln -s Xsym" top2_dir 132 let &rtp = top2_dir . ',' . top2_dir . '/after' 133 let &packpath = &rtp 134 135 let s:plugdir = top2_dir . '/pack/mine/opt/mytest' 136 call mkdir(s:plugdir . '/plugin', 'p') 137 138 exe 'split ' . s:plugdir . '/plugin/test.vim' 139 call setline(1, 'let g:plugin_works = 44') 140 wq 141 let g:plugin_works = 0 142 143 packadd mytest 144 145 " Must have been inserted in the middle, not at the end 146 call assert_match('/pack/mine/opt/mytest,', &rtp) 147 call assert_equal(44, g:plugin_works) 148 149 " No change when doing it again. 150 let rtp_before = &rtp 151 packadd mytest 152 call assert_equal(rtp_before, &rtp) 153 154 set rtp& 155 let rtp = &rtp 156 exec "silent !rm" top2_dir 157 endfunc 158 159 func Test_packadd_symlink_dir2() 160 if !has('unix') 161 return 162 endif 163 let top2_dir = s:topdir . '/Xdir2' 164 let real_dir = s:topdir . '/Xsym/pack' 165 call mkdir(top2_dir, 'p') 166 call mkdir(real_dir, 'p') 167 let &rtp = top2_dir . ',' . top2_dir . '/after' 168 let &packpath = &rtp 169 170 exec "silent !ln -s ../Xsym/pack" top2_dir . '/pack' 171 let s:plugdir = top2_dir . '/pack/mine/opt/mytest' 172 call mkdir(s:plugdir . '/plugin', 'p') 173 174 exe 'split ' . s:plugdir . '/plugin/test.vim' 175 call setline(1, 'let g:plugin_works = 48') 176 wq 177 let g:plugin_works = 0 178 179 packadd mytest 180 181 " Must have been inserted in the middle, not at the end 182 call assert_match('/Xdir2/pack/mine/opt/mytest,', &rtp) 183 call assert_equal(48, g:plugin_works) 184 185 " No change when doing it again. 186 let rtp_before = &rtp 187 packadd mytest 188 call assert_equal(rtp_before, &rtp) 189 190 set rtp& 191 let rtp = &rtp 192 exec "silent !rm" top2_dir . '/pack' 193 exec "silent !rmdir" top2_dir 194 endfunc 195 196 " Check command-line completion for :packadd 197 func Test_packadd_completion() 198 let optdir1 = &packpath . '/pack/mine/opt' 199 let optdir2 = &packpath . '/pack/candidate/opt' 200 201 call mkdir(optdir1 . '/pluginA', 'p') 202 call mkdir(optdir1 . '/pluginC', 'p') 203 call writefile([], optdir1 . '/unrelated') 204 call mkdir(optdir2 . '/pluginB', 'p') 205 call mkdir(optdir2 . '/pluginC', 'p') 206 call writefile([], optdir2 . '/unrelated') 207 208 let li = [] 209 call feedkeys(":packadd \<Tab>')\<C-B>call add(li, '\<CR>", 't') 210 call feedkeys(":packadd " . repeat("\<Tab>", 2) . "')\<C-B>call add(li, '\<CR>", 't') 211 call feedkeys(":packadd " . repeat("\<Tab>", 3) . "')\<C-B>call add(li, '\<CR>", 't') 212 call feedkeys(":packadd " . repeat("\<Tab>", 4) . "')\<C-B>call add(li, '\<CR>", 'tx') 213 call assert_equal("packadd pluginA", li[0]) 214 call assert_equal("packadd pluginB", li[1]) 215 call assert_equal("packadd pluginC", li[2]) 216 call assert_equal("packadd ", li[3]) 217 endfunc 218 219 func Test_packloadall() 220 " plugin foo with an autoload directory 221 let fooplugindir = &packpath . '/pack/mine/start/foo/plugin' 222 call mkdir(fooplugindir, 'p') 223 call writefile(['let g:plugin_foo_number = 1234', 224 \ 'let g:plugin_foo_auto = bbb#value', 225 \ 'let g:plugin_extra_auto = extra#value'], fooplugindir . '/bar.vim') 226 let fooautodir = &packpath . '/pack/mine/start/foo/autoload' 227 call mkdir(fooautodir, 'p') 228 call writefile(['let bar#value = 77'], fooautodir . '/bar.vim') 229 230 " plugin aaa with an autoload directory 231 let aaaplugindir = &packpath . '/pack/mine/start/aaa/plugin' 232 call mkdir(aaaplugindir, 'p') 233 call writefile(['let g:plugin_aaa_number = 333', 234 \ 'let g:plugin_aaa_auto = bar#value'], aaaplugindir . '/bbb.vim') 235 let aaaautodir = &packpath . '/pack/mine/start/aaa/autoload' 236 call mkdir(aaaautodir, 'p') 237 call writefile(['let bbb#value = 55'], aaaautodir . '/bbb.vim') 238 239 " plugin extra with only an autoload directory 240 let extraautodir = &packpath . '/pack/mine/start/extra/autoload' 241 call mkdir(extraautodir, 'p') 242 call writefile(['let extra#value = 99'], extraautodir . '/extra.vim') 243 244 packloadall 245 call assert_equal(1234, g:plugin_foo_number) 246 call assert_equal(55, g:plugin_foo_auto) 247 call assert_equal(99, g:plugin_extra_auto) 248 call assert_equal(333, g:plugin_aaa_number) 249 call assert_equal(77, g:plugin_aaa_auto) 250 251 " only works once 252 call writefile(['let g:plugin_bar_number = 4321'], fooplugindir . '/bar2.vim') 253 packloadall 254 call assert_false(exists('g:plugin_bar_number')) 255 256 " works when ! used 257 packloadall! 258 call assert_equal(4321, g:plugin_bar_number) 259 endfunc 260 261 func Test_start_autoload() 262 " plugin foo with an autoload directory 263 let autodir = &packpath .. '/pack/mine/start/foo/autoload' 264 call mkdir(autodir, 'p') 265 let fname = autodir .. '/foobar.vim' 266 call writefile(['func foobar#test()', 267 \ ' return 1666', 268 \ 'endfunc'], fname) 269 270 call assert_equal(1666, foobar#test()) 271 call delete(fname) 272 endfunc 273 274 func Test_helptags() 275 let docdir1 = &packpath . '/pack/mine/start/foo/doc' 276 let docdir2 = &packpath . '/pack/mine/start/bar/doc' 277 call mkdir(docdir1, 'p') 278 call mkdir(docdir2, 'p') 279 call writefile(['look here: *look-here*'], docdir1 . '/bar.txt') 280 call writefile(['look away: *look-away*'], docdir2 . '/foo.txt') 281 exe 'set rtp=' . &packpath . '/pack/mine/start/foo,' . &packpath . '/pack/mine/start/bar' 282 283 helptags ALL 284 285 let tags1 = readfile(docdir1 . '/tags') 286 call assert_match('look-here', tags1[0]) 287 let tags2 = readfile(docdir2 . '/tags') 288 call assert_match('look-away', tags2[0]) 289 290 call assert_fails('helptags abcxyz', 'E150:') 291 endfunc 292 293 func Test_colorscheme() 294 let colordirrun = &packpath . '/runtime/colors' 295 let colordirstart = &packpath . '/pack/mine/start/foo/colors' 296 let colordiropt = &packpath . '/pack/mine/opt/bar/colors' 297 call mkdir(colordirrun, 'p') 298 call mkdir(colordirstart, 'p') 299 call mkdir(colordiropt, 'p') 300 call writefile(['let g:found_one = 1'], colordirrun . '/one.vim') 301 call writefile(['let g:found_two = 1'], colordirstart . '/two.vim') 302 call writefile(['let g:found_three = 1'], colordiropt . '/three.vim') 303 exe 'set rtp=' . &packpath . '/runtime' 304 305 colorscheme one 306 call assert_equal(1, g:found_one) 307 colorscheme two 308 call assert_equal(1, g:found_two) 309 colorscheme three 310 call assert_equal(1, g:found_three) 311 endfunc 312 313 func Test_colorscheme_completion() 314 let colordirrun = &packpath . '/runtime/colors' 315 let colordirstart = &packpath . '/pack/mine/start/foo/colors' 316 let colordiropt = &packpath . '/pack/mine/opt/bar/colors' 317 call mkdir(colordirrun, 'p') 318 call mkdir(colordirstart, 'p') 319 call mkdir(colordiropt, 'p') 320 call writefile(['let g:found_one = 1'], colordirrun . '/one.vim') 321 call writefile(['let g:found_two = 1'], colordirstart . '/two.vim') 322 call writefile(['let g:found_three = 1'], colordiropt . '/three.vim') 323 exe 'set rtp=' . &packpath . '/runtime' 324 325 let li=[] 326 call feedkeys(":colorscheme " . repeat("\<Tab>", 1) . "')\<C-B>call add(li, '\<CR>", 't') 327 call feedkeys(":colorscheme " . repeat("\<Tab>", 2) . "')\<C-B>call add(li, '\<CR>", 't') 328 call feedkeys(":colorscheme " . repeat("\<Tab>", 3) . "')\<C-B>call add(li, '\<CR>", 't') 329 call feedkeys(":colorscheme " . repeat("\<Tab>", 4) . "')\<C-B>call add(li, '\<CR>", 'tx') 330 call assert_equal("colorscheme one", li[0]) 331 call assert_equal("colorscheme three", li[1]) 332 call assert_equal("colorscheme two", li[2]) 333 call assert_equal("colorscheme ", li[3]) 334 endfunc 335 336 func Test_runtime() 337 let rundir = &packpath . '/runtime/extra' 338 let startdir = &packpath . '/pack/mine/start/foo/extra' 339 let optdir = &packpath . '/pack/mine/opt/bar/extra' 340 call mkdir(rundir, 'p') 341 call mkdir(startdir, 'p') 342 call mkdir(optdir, 'p') 343 call writefile(['let g:sequence .= "run"'], rundir . '/bar.vim') 344 call writefile(['let g:sequence .= "start"'], startdir . '/bar.vim') 345 call writefile(['let g:sequence .= "foostart"'], startdir . '/foo.vim') 346 call writefile(['let g:sequence .= "opt"'], optdir . '/bar.vim') 347 call writefile(['let g:sequence .= "xxxopt"'], optdir . '/xxx.vim') 348 exe 'set rtp=' . &packpath . '/runtime' 349 350 let g:sequence = '' 351 runtime extra/bar.vim 352 call assert_equal('run', g:sequence) 353 let g:sequence = '' 354 runtime NoSuchFile extra/bar.vim 355 call assert_equal('run', g:sequence) 356 357 let g:sequence = '' 358 runtime START extra/bar.vim 359 call assert_equal('start', g:sequence) 360 let g:sequence = '' 361 runtime START NoSuchFile extra/bar.vim extra/foo.vim 362 call assert_equal('start', g:sequence) 363 let g:sequence = '' 364 runtime START NoSuchFile extra/foo.vim extra/bar.vim 365 call assert_equal('foostart', g:sequence) 366 let g:sequence = '' 367 runtime! START NoSuchFile extra/bar.vim extra/foo.vim 368 call assert_equal('startfoostart', g:sequence) 369 370 let g:sequence = '' 371 runtime OPT extra/bar.vim 372 call assert_equal('opt', g:sequence) 373 let g:sequence = '' 374 runtime OPT NoSuchFile extra/bar.vim extra/xxx.vim 375 call assert_equal('opt', g:sequence) 376 let g:sequence = '' 377 runtime OPT NoSuchFile extra/xxx.vim extra/bar.vim 378 call assert_equal('xxxopt', g:sequence) 379 let g:sequence = '' 380 runtime! OPT NoSuchFile extra/bar.vim extra/xxx.vim 381 call assert_equal('optxxxopt', g:sequence) 382 383 let g:sequence = '' 384 runtime PACK extra/bar.vim 385 call assert_equal('start', g:sequence) 386 let g:sequence = '' 387 runtime! PACK extra/bar.vim 388 call assert_equal('startopt', g:sequence) 389 let g:sequence = '' 390 runtime PACK extra/xxx.vim 391 call assert_equal('xxxopt', g:sequence) 392 let g:sequence = '' 393 runtime PACK extra/xxx.vim extra/foo.vim extra/bar.vim 394 call assert_equal('foostart', g:sequence) 395 let g:sequence = '' 396 runtime! PACK extra/bar.vim extra/xxx.vim extra/foo.vim 397 call assert_equal('startfoostartoptxxxopt', g:sequence) 398 399 let g:sequence = '' 400 runtime ALL extra/bar.vim 401 call assert_equal('run', g:sequence) 402 let g:sequence = '' 403 runtime ALL extra/foo.vim 404 call assert_equal('foostart', g:sequence) 405 let g:sequence = '' 406 runtime! ALL extra/xxx.vim 407 call assert_equal('xxxopt', g:sequence) 408 let g:sequence = '' 409 runtime! ALL extra/bar.vim 410 call assert_equal('runstartopt', g:sequence) 411 let g:sequence = '' 412 runtime ALL extra/xxx.vim extra/foo.vim extra/bar.vim 413 call assert_equal('run', g:sequence) 414 let g:sequence = '' 415 runtime! ALL extra/bar.vim extra/xxx.vim extra/foo.vim 416 call assert_equal('runstartfoostartoptxxxopt', g:sequence) 417 endfunc 418 419 func Test_runtime_completion() 420 let rundir = &packpath . '/runtime/Aextra' 421 let startdir = &packpath . '/pack/mine/start/foo/Aextra' 422 let optdir = &packpath . '/pack/mine/opt/bar/Aextra' 423 call mkdir(rundir . '/Arunbaz', 'p') 424 call mkdir(startdir . '/Astartbaz', 'p') 425 call mkdir(optdir . '/Aoptbaz', 'p') 426 call writefile([], rundir . '/../Arunfoo.vim') 427 call writefile([], rundir . '/Arunbar.vim') 428 call writefile([], rundir . '/Aunrelated') 429 call writefile([], rundir . '/../Aunrelated') 430 call writefile([], startdir . '/../Astartfoo.vim') 431 call writefile([], startdir . '/Astartbar.vim') 432 call writefile([], startdir . '/Aunrelated') 433 call writefile([], startdir . '/../Aunrelated') 434 call writefile([], optdir . '/../Aoptfoo.vim') 435 call writefile([], optdir . '/Aoptbar.vim') 436 call writefile([], optdir . '/Aunrelated') 437 call writefile([], optdir . '/../Aunrelated') 438 exe 'set rtp=' . &packpath . '/runtime' 439 440 func Check_runtime_completion(arg, arg_prev, res) 441 call feedkeys(':runtime ' .. a:arg .. "\<C-A>\<C-B>\"\<CR>", 'xt') 442 call assert_equal('"runtime ' .. a:arg_prev .. join(a:res), @:) 443 call assert_equal(a:res, getcompletion(a:arg, 'runtime')) 444 endfunc 445 446 call Check_runtime_completion('', '', 447 \ ['Aextra/', 'Arunfoo.vim', 'START', 'OPT', 'PACK', 'ALL']) 448 call Check_runtime_completion('S', '', 449 \ ['START']) 450 call Check_runtime_completion('O', '', 451 \ ['OPT']) 452 call Check_runtime_completion('P', '', 453 \ ['PACK']) 454 call Check_runtime_completion('A', '', 455 \ ['Aextra/', 'Arunfoo.vim', 'ALL']) 456 call Check_runtime_completion('Other.vim ', 'Other.vim ', 457 \ ['Aextra/', 'Arunfoo.vim']) 458 call Check_runtime_completion('Aextra/', '', 459 \ ['Aextra/Arunbar.vim', 'Aextra/Arunbaz/']) 460 call Check_runtime_completion('Other.vim Aextra/', 'Other.vim ', 461 \ ['Aextra/Arunbar.vim', 'Aextra/Arunbaz/']) 462 463 call Check_runtime_completion('START ', 'START ', 464 \ ['Aextra/', 'Astartfoo.vim']) 465 call Check_runtime_completion('START Other.vim ', 'START Other.vim ', 466 \ ['Aextra/', 'Astartfoo.vim']) 467 call Check_runtime_completion('START A', 'START ', 468 \ ['Aextra/', 'Astartfoo.vim']) 469 call Check_runtime_completion('START Other.vim A', 'START Other.vim ', 470 \ ['Aextra/', 'Astartfoo.vim']) 471 call Check_runtime_completion('START Aextra/', 'START ', 472 \ ['Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 473 call Check_runtime_completion('START Other.vim Aextra/', 'START Other.vim ', 474 \ ['Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 475 476 call Check_runtime_completion('OPT ', 'OPT ', 477 \ ['Aextra/', 'Aoptfoo.vim']) 478 call Check_runtime_completion('OPT Other.vim ', 'OPT Other.vim ', 479 \ ['Aextra/', 'Aoptfoo.vim']) 480 call Check_runtime_completion('OPT A', 'OPT ', 481 \ ['Aextra/', 'Aoptfoo.vim']) 482 call Check_runtime_completion('OPT Other.vim A', 'OPT Other.vim ', 483 \ ['Aextra/', 'Aoptfoo.vim']) 484 call Check_runtime_completion('OPT Aextra/', 'OPT ', 485 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/']) 486 call Check_runtime_completion('OPT Other.vim Aextra/', 'OPT Other.vim ', 487 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/']) 488 489 call Check_runtime_completion('PACK ', 'PACK ', 490 \ ['Aextra/', 'Aoptfoo.vim', 'Astartfoo.vim']) 491 call Check_runtime_completion('PACK Other.vim ', 'PACK Other.vim ', 492 \ ['Aextra/', 'Aoptfoo.vim', 'Astartfoo.vim']) 493 call Check_runtime_completion('PACK A', 'PACK ', 494 \ ['Aextra/', 'Aoptfoo.vim', 'Astartfoo.vim']) 495 call Check_runtime_completion('PACK Other.vim A', 'PACK Other.vim ', 496 \ ['Aextra/', 'Aoptfoo.vim', 'Astartfoo.vim']) 497 call Check_runtime_completion('PACK Aextra/', 'PACK ', 498 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/', 499 \ 'Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 500 call Check_runtime_completion('PACK Other.vim Aextra/', 'PACK Other.vim ', 501 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/', 502 \ 'Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 503 504 call Check_runtime_completion('ALL ', 'ALL ', 505 \ ['Aextra/', 'Aoptfoo.vim', 'Arunfoo.vim', 'Astartfoo.vim']) 506 call Check_runtime_completion('ALL Other.vim ', 'ALL Other.vim ', 507 \ ['Aextra/', 'Aoptfoo.vim', 'Arunfoo.vim', 'Astartfoo.vim']) 508 call Check_runtime_completion('ALL A', 'ALL ', 509 \ ['Aextra/', 'Aoptfoo.vim', 'Arunfoo.vim', 'Astartfoo.vim']) 510 call Check_runtime_completion('ALL Other.vim A', 'ALL Other.vim ', 511 \ ['Aextra/', 'Aoptfoo.vim', 'Arunfoo.vim', 'Astartfoo.vim']) 512 call Check_runtime_completion('ALL Aextra/', 'ALL ', 513 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/', 514 \ 'Aextra/Arunbar.vim', 'Aextra/Arunbaz/', 515 \ 'Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 516 call Check_runtime_completion('ALL Other.vim Aextra/', 'ALL Other.vim ', 517 \ ['Aextra/Aoptbar.vim', 'Aextra/Aoptbaz/', 518 \ 'Aextra/Arunbar.vim', 'Aextra/Arunbaz/', 519 \ 'Aextra/Astartbar.vim', 'Aextra/Astartbaz/']) 520 521 delfunc Check_runtime_completion 522 endfunc 523 524 " vim: shiftwidth=2 sts=2 expandtab