diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 4e0b166..380d64b 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -6,24 +6,67 @@
 
 set encoding=utf-8
 
+function! s:setup_commands(cchar)
+  if a:cchar == 'c'
+    command! -nargs=* -bang Xlist <mods>clist<bang> <args>
+    command! -nargs=* Xgetexpr <mods>cgetexpr <args>
+    command! -nargs=* Xolder <mods>colder <args>
+    command! -nargs=* Xnewer <mods>cnewer <args>
+    command! -nargs=* Xopen <mods>copen <args>
+    command! -nargs=* Xwindow <mods>cwindow <args>
+    command! -nargs=* Xclose <mods>cclose <args>
+    command! -nargs=* -bang Xfile <mods>cfile<bang> <args>
+    command! -nargs=* Xgetfile <mods>cgetfile <args>
+    command! -nargs=* Xaddfile <mods>caddfile <args>
+    command! -nargs=* -bang Xbuffer <mods>cbuffer<bang> <args>
+    command! -nargs=* Xgetbuffer <mods>cgetbuffer <args>
+    command! -nargs=* Xaddbuffer <mods>caddbuffer <args>
+    command! -nargs=* Xrewind <mods>crewind <args>
+    command! -nargs=* -bang Xnext <mods>cnext<bang> <args>
+    command! -nargs=* Xexpr <mods>cexpr <args>
+    command! -nargs=* Xvimgrep <mods>vimgrep <args>
+    let g:Xgetlist = function('getqflist')
+    let g:Xsetlist = function('setqflist')
+  else
+    command! -nargs=* -bang Xlist <mods>llist<bang> <args>
+    command! -nargs=* Xgetexpr <mods>lgetexpr <args>
+    command! -nargs=* Xolder <mods>lolder <args>
+    command! -nargs=* Xnewer <mods>lnewer <args>
+    command! -nargs=* Xopen <mods>lopen <args>
+    command! -nargs=* Xwindow <mods>lwindow <args>
+    command! -nargs=* Xclose <mods>lclose <args>
+    command! -nargs=* -bang Xfile <mods>lfile<bang> <args>
+    command! -nargs=* Xgetfile <mods>lgetfile <args>
+    command! -nargs=* Xaddfile <mods>laddfile <args>
+    command! -nargs=* -bang Xbuffer <mods>lbuffer<bang> <args>
+    command! -nargs=* Xgetbuffer <mods>lgetbuffer <args>
+    command! -nargs=* Xaddbuffer <mods>laddbuffer <args>
+    command! -nargs=* Xrewind <mods>lrewind <args>
+    command! -nargs=* -bang Xnext <mods>lnext<bang> <args>
+    command! -nargs=* Xexpr <mods>lexpr <args>
+    command! -nargs=* Xvimgrep <mods>lvimgrep <args>
+    let g:Xgetlist = function('getloclist', [0])
+    let g:Xsetlist = function('setloclist', [0])
+  endif
+endfunction
+
 " Tests for the :clist and :llist commands
 function XlistTests(cchar)
-  let Xlist = a:cchar . 'list'
-  let Xgetexpr = a:cchar . 'getexpr'
+  call s:setup_commands(a:cchar)
 
   " With an empty list, command should return error
-  exe Xgetexpr . ' []'
-  exe 'silent! ' . Xlist
+  Xgetexpr []
+  silent! Xlist
   call assert_true(v:errmsg ==# 'E42: No Errors')
 
   " Populate the list and then try
-  exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1',
+  Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1',
 		  \ 'non-error 2', 'Xtestfile2:2:2:Line2',
-		  \ 'non-error 3', 'Xtestfile3:3:1:Line3']"
+		  \ 'non-error 3', 'Xtestfile3:3:1:Line3']
 
   " List only valid entries
   redir => result
-  exe Xlist
+  Xlist
   redir END
   let l = split(result, "\n")
   call assert_equal([' 2 Xtestfile1:1 col 3: Line1',
@@ -32,7 +75,7 @@
 
   " List all the entries
   redir => result
-  exe Xlist . "!"
+  Xlist!
   redir END
   let l = split(result, "\n")
   call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1',
@@ -41,26 +84,26 @@
 
   " List a range of errors
   redir => result
-  exe Xlist . " 3,6"
+  Xlist 3,6
   redir END
   let l = split(result, "\n")
   call assert_equal([' 4 Xtestfile2:2 col 2: Line2',
 		   \ ' 6 Xtestfile3:3 col 1: Line3'], l)
 
   redir => result
-  exe Xlist . "! 3,4"
+  Xlist! 3,4
   redir END
   let l = split(result, "\n")
   call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l)
 
   redir => result
-  exe Xlist . " -6,-4"
+  Xlist -6,-4
   redir END
   let l = split(result, "\n")
   call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l)
 
   redir => result
-  exe Xlist . "! -5,-3"
+  Xlist! -5,-3
   redir END
   let l = split(result, "\n")
   call assert_equal([' 2 Xtestfile1:1 col 3: Line1',
@@ -76,44 +119,37 @@
 " Note that this test assumes that a quickfix/location list is
 " already set by the caller.
 function XageTests(cchar)
-  let Xolder = a:cchar . 'older'
-  let Xnewer = a:cchar . 'newer'
-  let Xgetexpr = a:cchar . 'getexpr'
-  if a:cchar == 'c'
-    let Xgetlist = function('getqflist')
-  else
-    let Xgetlist = function('getloclist', [0])
-  endif
+  call s:setup_commands(a:cchar)
 
   " Jumping to a non existent list should return error
-  exe 'silent! ' . Xolder . ' 99'
+  silent! Xolder 99
   call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack')
 
-  exe 'silent! ' . Xnewer . ' 99'
+  silent! Xnewer 99
   call assert_true(v:errmsg ==# 'E381: At top of quickfix stack')
 
   " Add three quickfix/location lists
-  exe Xgetexpr . " ['Xtestfile1:1:3:Line1']"
-  exe Xgetexpr . " ['Xtestfile2:2:2:Line2']"
-  exe Xgetexpr . " ['Xtestfile3:3:1:Line3']"
+  Xgetexpr ['Xtestfile1:1:3:Line1']
+  Xgetexpr ['Xtestfile2:2:2:Line2']
+  Xgetexpr ['Xtestfile3:3:1:Line3']
 
   " Go back two lists
-  exe Xolder
-  let l = Xgetlist()
+  Xolder
+  let l = g:Xgetlist()
   call assert_equal('Line2', l[0].text)
 
   " Go forward two lists
-  exe Xnewer
-  let l = Xgetlist()
+  Xnewer
+  let l = g:Xgetlist()
   call assert_equal('Line3', l[0].text)
 
   " Test for the optional count argument
-  exe Xolder . ' 2'
-  let l = Xgetlist()
+  Xolder 2
+  let l = g:Xgetlist()
   call assert_equal('Line1', l[0].text)
 
-  exe Xnewer . ' 2'
-  let l = Xgetlist()
+  Xnewer 2
+  let l = g:Xgetlist()
   call assert_equal('Line3', l[0].text)
 endfunction
 
@@ -129,49 +165,46 @@
 " Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen
 " commands
 function XwindowTests(cchar)
-  let Xwindow = a:cchar . 'window'
-  let Xclose = a:cchar . 'close'
-  let Xopen = a:cchar . 'open'
-  let Xgetexpr = a:cchar . 'getexpr'
+  call s:setup_commands(a:cchar)
 
   " Create a list with no valid entries
-  exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']"
+  Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3']
 
   " Quickfix/Location window should not open with no valid errors
-  exe Xwindow
+  Xwindow
   call assert_true(winnr('$') == 1)
 
   " Create a list with valid entries
-  exe Xgetexpr . " ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2',
-		  \ 'Xtestfile3:3:1:Line3']"
+  Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2',
+		  \ 'Xtestfile3:3:1:Line3']
 
   " Open the window
-  exe Xwindow
+  Xwindow
   call assert_true(winnr('$') == 2 && winnr() == 2 &&
 	\ getline('.') ==# 'Xtestfile1|1 col 3| Line1')
 
   " Close the window
-  exe Xclose
+  Xclose
   call assert_true(winnr('$') == 1)
 
   " Create a list with no valid entries
-  exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']"
+  Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3']
 
   " Open the window
-  exe Xopen . ' 5'
+  Xopen 5
   call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1'
 		      \  && winheight('.') == 5)
 
   " Opening the window again, should move the cursor to that window
   wincmd t
-  exe Xopen . ' 7'
+  Xopen 7
   call assert_true(winnr('$') == 2 && winnr() == 2 &&
 	\ winheight('.') == 7 &&
 	\ getline('.') ==# '|| non-error 1')
 
 
   " Calling cwindow should close the quickfix window with no valid errors
-  exe Xwindow
+  Xwindow
   call assert_true(winnr('$') == 1)
 endfunction
 
@@ -183,21 +216,14 @@
 " Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile
 " commands.
 function XfileTests(cchar)
-  let Xfile = a:cchar . 'file'
-  let Xgetfile = a:cchar . 'getfile'
-  let Xaddfile = a:cchar . 'addfile'
-  if a:cchar == 'c'
-    let Xgetlist = function('getqflist')
-  else
-    let Xgetlist = function('getloclist', [0])
-  endif
+  call s:setup_commands(a:cchar)
 
   call writefile(['Xtestfile1:700:10:Line 700',
 	\ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1')
 
   enew!
-  exe Xfile . ' Xqftestfile1'
-  let l = Xgetlist()
+  Xfile Xqftestfile1
+  let l = g:Xgetlist()
   call assert_true(len(l) == 2 &&
 	\ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' &&
 	\ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800')
@@ -205,12 +231,12 @@
   " Run cfile/lfile from a modified buffer
   enew!
   silent! put ='Quickfix'
-  exe 'silent! ' . Xfile . ' Xqftestfile1'
+  silent! Xfile Xqftestfile1
   call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)')
 
   call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1')
-  exe Xaddfile . ' Xqftestfile1'
-  let l = Xgetlist()
+  Xaddfile Xqftestfile1
+  let l = g:Xgetlist()
   call assert_true(len(l) == 3 &&
 	\ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900')
 
@@ -218,8 +244,8 @@
 	\ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1')
 
   enew!
-  exe Xgetfile . ' Xqftestfile1'
-  let l = Xgetlist()
+  Xgetfile Xqftestfile1
+  let l = g:Xgetlist()
   call assert_true(len(l) == 2 &&
 	\ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' &&
 	\ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333')
@@ -235,20 +261,13 @@
 " Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and
 " :lgetbuffer commands.
 function XbufferTests(cchar)
-  let Xbuffer = a:cchar . 'buffer'
-  let Xgetbuffer = a:cchar . 'getbuffer'
-  let Xaddbuffer = a:cchar . 'addbuffer'
-  if a:cchar == 'c'
-    let Xgetlist = function('getqflist')
-  else
-    let Xgetlist = function('getloclist', [0])
-  endif
+  call s:setup_commands(a:cchar)
 
   enew!
   silent! call setline(1, ['Xtestfile7:700:10:Line 700',
 	\ 'Xtestfile8:800:15:Line 800'])
-  exe Xbuffer . "!"
-  let l = Xgetlist()
+  Xbuffer!
+  let l = g:Xgetlist()
   call assert_true(len(l) == 2 &&
 	\ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' &&
 	\ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800')
@@ -256,8 +275,8 @@
   enew!
   silent! call setline(1, ['Xtestfile9:900:55:Line 900',
 	\ 'Xtestfile10:950:66:Line 950'])
-  exe Xgetbuffer
-  let l = Xgetlist()
+  Xgetbuffer
+  let l = g:Xgetlist()
   call assert_true(len(l) == 2 &&
 	\ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' &&
 	\ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950')
@@ -265,8 +284,8 @@
   enew!
   silent! call setline(1, ['Xtestfile11:700:20:Line 700',
 	\ 'Xtestfile12:750:25:Line 750'])
-  exe Xaddbuffer
-  let l = Xgetlist()
+  Xaddbuffer
+  let l = g:Xgetlist()
   call assert_true(len(l) == 4 &&
 	\ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' &&
 	\ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' &&
@@ -338,37 +357,30 @@
 endfunc
 
 function XqfTitleTests(cchar)
-  let Xgetexpr = a:cchar . 'getexpr'
-  if a:cchar == 'c'
-    let Xgetlist = function('getqflist')
-  else
-    let Xgetlist = function('getloclist', [0])
-  endif
-  let Xopen = a:cchar . 'open'
-  let Xclose = a:cchar . 'close'
+  call s:setup_commands(a:cchar)
 
-  exe Xgetexpr . " ['file:1:1:message']"
-  let l = Xgetlist()
+  Xgetexpr ['file:1:1:message']
+  let l = g:Xgetlist()
   if a:cchar == 'c'
     call setqflist(l, 'r')
   else
     call setloclist(0, l, 'r')
   endif
 
-  exe Xopen
+  Xopen
   if a:cchar == 'c'
     let title = ':setqflist()'
   else
     let title = ':setloclist()'
   endif
   call assert_equal(title, w:quickfix_title)
-  exe Xclose
+  Xclose
 endfunction
 
 " Tests for quickfix window's title
 function Test_qf_title()
-    call XqfTitleTests('c')
-    call XqfTitleTests('l')
+  call XqfTitleTests('c')
+  call XqfTitleTests('l')
 endfunction
 
 " Tests for 'errorformat'
@@ -641,13 +653,6 @@
 
 " Test for quickfix directory stack support
 function! s:dir_stack_tests(cchar)
-  let Xgetexpr = a:cchar . 'getexpr'
-  if a:cchar == 'c'
-    let Xgetlist = function('getqflist')
-  else
-    let Xgetlist = function('getloclist', [0])
-  endif
-
   let save_efm=&efm
   set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f'
 
@@ -662,12 +667,12 @@
 		\ "Leaving dir 'dir1/a'\n" .
 		\ 'habits1.txt:4:2 Liters of water' . "\n" .
 		\ "Entering dir 'dir2'\n" .
-		\ 'habits5.txt:5:3 Cups of hot green tea' . "\n" .
+		\ 'habits5.txt:5:3 Cups of hot green tea' . "\n"
 		\ "Leaving dir 'dir2'\n"
 
-  exe Xgetexpr . " l"
+  Xgetexpr l
 
-  let qf = Xgetlist()
+  let qf = g:Xgetlist()
 
   call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr))
   call assert_equal(1, qf[1].lnum)
@@ -721,18 +726,14 @@
 endfunction
 
 function XquickfixChangedByAutocmd(cchar)
-  let Xolder = a:cchar . 'older'
-  let Xgetexpr = a:cchar . 'getexpr'
-  let Xrewind = a:cchar . 'rewind'
+  call s:setup_commands(a:cchar)
   if a:cchar == 'c'
-    let Xsetlist = function('setqflist')
     let ErrorNr = 'E925'
     function! ReadFunc()
       colder
       cgetexpr []
     endfunc
   else
-    let Xsetlist = function('setloclist', [0])
     let ErrorNr = 'E926'
     function! ReadFunc()
       lolder
@@ -750,9 +751,9 @@
   let qflist = []
   for word in words
     call add(qflist, {'filename': 'test_changed.txt'})
-    call Xsetlist(qflist, ' ')
+    call g:Xsetlist(qflist, ' ')
   endfor
-  exec "call assert_fails('" . Xrewind . "', '" . ErrorNr . ":')"
+  call assert_fails('Xrewind', ErrorNr . ':')
 
   augroup! testgroup
 endfunc
@@ -778,51 +779,44 @@
 func Test_cgetexpr_works()
   " this must not crash Vim
   cgetexpr [$x]
+  lgetexpr [$x]
 endfunc
 
 " Tests for the setqflist() and setloclist() functions
 function SetXlistTests(cchar, bnum)
-  let Xwindow = a:cchar . 'window'
-  let Xnext = a:cchar . 'next'
-  if a:cchar == 'c'
-    let Xsetlist = function('setqflist')
-    let Xgetlist = function('getqflist')
-  else
-    let Xsetlist = function('setloclist', [0])
-    let Xgetlist = function('getloclist', [0])
-  endif
+  call s:setup_commands(a:cchar)
 
-  call Xsetlist([{'bufnr': a:bnum, 'lnum': 1},
+  call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1},
 	      \  {'bufnr': a:bnum, 'lnum': 2}])
-  let l = Xgetlist()
+  let l = g:Xgetlist()
   call assert_equal(2, len(l))
   call assert_equal(2, l[1].lnum)
 
-  exe Xnext
-  call Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a')
-  let l = Xgetlist()
+  Xnext
+  call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a')
+  let l = g:Xgetlist()
   call assert_equal(3, len(l))
-  exe Xnext
+  Xnext
   call assert_equal(3, line('.'))
 
   " Appending entries to the list should not change the cursor position
   " in the quickfix window
-  exe Xwindow
+  Xwindow
   1
-  call Xsetlist([{'bufnr': a:bnum, 'lnum': 4},
+  call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4},
 	      \  {'bufnr': a:bnum, 'lnum': 5}], 'a')
   call assert_equal(1, line('.'))
   close
 
-  call Xsetlist([{'bufnr': a:bnum, 'lnum': 3},
+  call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3},
 	      \  {'bufnr': a:bnum, 'lnum': 4},
 	      \  {'bufnr': a:bnum, 'lnum': 5}], 'r')
-  let l = Xgetlist()
+  let l = g:Xgetlist()
   call assert_equal(3, len(l))
   call assert_equal(5, l[2].lnum)
 
-  call Xsetlist([])
-  let l = Xgetlist()
+  call g:Xsetlist([])
+  let l = g:Xgetlist()
   call assert_equal(0, len(l))
 endfunction
 
@@ -838,58 +832,65 @@
   call delete('Xtestfile')
 endfunction
 
-func Test_setqflist_empty_middle()
+function Xlist_empty_middle(cchar)
+  call s:setup_commands(a:cchar)
+
   " create three quickfix lists
-  vimgrep Test_ test_quickfix.vim
-  let testlen = len(getqflist())
+  Xvimgrep Test_ test_quickfix.vim
+  let testlen = len(g:Xgetlist())
   call assert_true(testlen > 0)
-  vimgrep empty test_quickfix.vim
-  call assert_true(len(getqflist()) > 0)
-  vimgrep matches test_quickfix.vim
-  let matchlen = len(getqflist())
+  Xvimgrep empty test_quickfix.vim
+  call assert_true(len(g:Xgetlist()) > 0)
+  Xvimgrep matches test_quickfix.vim
+  let matchlen = len(g:Xgetlist())
   call assert_true(matchlen > 0)
-  colder
+  Xolder
   " make the middle list empty
-  call setqflist([], 'r')
-  call assert_true(len(getqflist()) == 0)
-  colder
-  call assert_equal(testlen, len(getqflist()))
-  cnewer
-  cnewer
-  call assert_equal(matchlen, len(getqflist()))
+  call g:Xsetlist([], 'r')
+  call assert_true(len(g:Xgetlist()) == 0)
+  Xolder
+  call assert_equal(testlen, len(g:Xgetlist()))
+  Xnewer
+  Xnewer
+  call assert_equal(matchlen, len(g:Xgetlist()))
 endfunc
 
-func Test_setqflist_empty_older()
+function Test_setqflist_empty_middle()
+  call Xlist_empty_middle('c')
+  call Xlist_empty_middle('l')
+endfunction
+
+function Xlist_empty_older(cchar)
+  call s:setup_commands(a:cchar)
+
   " create three quickfix lists
-  vimgrep one test_quickfix.vim
-  let onelen = len(getqflist())
+  Xvimgrep one test_quickfix.vim
+  let onelen = len(g:Xgetlist())
   call assert_true(onelen > 0)
-  vimgrep two test_quickfix.vim
-  let twolen = len(getqflist())
+  Xvimgrep two test_quickfix.vim
+  let twolen = len(g:Xgetlist())
   call assert_true(twolen > 0)
-  vimgrep three test_quickfix.vim
-  let threelen = len(getqflist())
+  Xvimgrep three test_quickfix.vim
+  let threelen = len(g:Xgetlist())
   call assert_true(threelen > 0)
-  colder 2
+  Xolder 2
   " make the first list empty, check the others didn't change
-  call setqflist([], 'r')
-  call assert_true(len(getqflist()) == 0)
-  cnewer
-  call assert_equal(twolen, len(getqflist()))
-  cnewer
-  call assert_equal(threelen, len(getqflist()))
-endfunc
+  call g:Xsetlist([], 'r')
+  call assert_true(len(g:Xgetlist()) == 0)
+  Xnewer
+  call assert_equal(twolen, len(g:Xgetlist()))
+  Xnewer
+  call assert_equal(threelen, len(g:Xgetlist()))
+endfunction
+
+function Test_setqflist_empty_older()
+  call Xlist_empty_older('c')
+  call Xlist_empty_older('l')
+endfunction
 
 function! XquickfixSetListWithAct(cchar)
-  let Xolder = a:cchar . 'older'
-  let Xnewer = a:cchar . 'newer'
-  if a:cchar == 'c'
-    let Xsetlist = function('setqflist')
-    let Xgetlist = function('getqflist')
-  else
-    let Xsetlist = function('setloclist', [0])
-    let Xgetlist = function('getloclist', [0])
-  endif
+  call s:setup_commands(a:cchar)
+
   let list1 = [{'filename': 'fnameA', 'text': 'A'},
           \    {'filename': 'fnameB', 'text': 'B'}]
   let list2 = [{'filename': 'fnameC', 'text': 'C'},
@@ -898,42 +899,42 @@
 
   " {action} is unspecified.  Same as specifing ' '.
   new | only
-  exec "silent! " . Xnewer . "99"
-  call Xsetlist(list1)
-  call Xsetlist(list2)
-  let li = Xgetlist()
+  silent! Xnewer 99
+  call g:Xsetlist(list1)
+  call g:Xsetlist(list2)
+  let li = g:Xgetlist()
   call assert_equal(3, len(li))
   call assert_equal('C', li[0]['text'])
   call assert_equal('D', li[1]['text'])
   call assert_equal('E', li[2]['text'])
-  exec "silent! " . Xolder
-  let li = Xgetlist()
+  silent! Xolder
+  let li = g:Xgetlist()
   call assert_equal(2, len(li))
   call assert_equal('A', li[0]['text'])
   call assert_equal('B', li[1]['text'])
 
   " {action} is specified ' '.
   new | only
-  exec "silent! " . Xnewer . "99"
-  call Xsetlist(list1)
-  call Xsetlist(list2, ' ')
-  let li = Xgetlist()
+  silent! Xnewer 99
+  call g:Xsetlist(list1)
+  call g:Xsetlist(list2, ' ')
+  let li = g:Xgetlist()
   call assert_equal(3, len(li))
   call assert_equal('C', li[0]['text'])
   call assert_equal('D', li[1]['text'])
   call assert_equal('E', li[2]['text'])
-  exec "silent! " . Xolder
-  let li = Xgetlist()
+  silent! Xolder
+  let li = g:Xgetlist()
   call assert_equal(2, len(li))
   call assert_equal('A', li[0]['text'])
   call assert_equal('B', li[1]['text'])
 
   " {action} is specified 'a'.
   new | only
-  exec "silent! " . Xnewer . "99"
-  call Xsetlist(list1)
-  call Xsetlist(list2, 'a')
-  let li = Xgetlist()
+  silent! Xnewer 99
+  call g:Xsetlist(list1)
+  call g:Xsetlist(list2, 'a')
+  let li = g:Xgetlist()
   call assert_equal(5, len(li))
   call assert_equal('A', li[0]['text'])
   call assert_equal('B', li[1]['text'])
@@ -943,10 +944,10 @@
 
   " {action} is specified 'r'.
   new | only
-  exec "silent! " . Xnewer . "99"
-  call Xsetlist(list1)
-  call Xsetlist(list2, 'r')
-  let li = Xgetlist()
+  silent! Xnewer 99
+  call g:Xsetlist(list1)
+  call g:Xsetlist(list2, 'r')
+  let li = g:Xgetlist()
   call assert_equal(3, len(li))
   call assert_equal('C', li[0]['text'])
   call assert_equal('D', li[1]['text'])
@@ -954,11 +955,11 @@
 
   " Test for wrong value.
   new | only
-  call assert_fails("call Xsetlist(0)", 'E714:')
-  call assert_fails("call Xsetlist(list1, '')", 'E927:')
-  call assert_fails("call Xsetlist(list1, 'aa')", 'E927:')
-  call assert_fails("call Xsetlist(list1, ' a')", 'E927:')
-  call assert_fails("call Xsetlist(list1, 0)", 'E928:')
+  call assert_fails("call g:Xsetlist(0)", 'E714:')
+  call assert_fails("call g:Xsetlist(list1, '')", 'E927:')
+  call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:')
+  call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:')
+  call assert_fails("call g:Xsetlist(list1, 0)", 'E928:')
 endfunc
 
 function Test_quickfix_set_list_with_act()
@@ -966,8 +967,8 @@
   call XquickfixSetListWithAct('l')
 endfunction
 
-func XLongLinesTests()
-  let l = getqflist()
+function XLongLinesTests(cchar)
+  let l = g:Xgetlist()
 
   call assert_equal(3, len(l))
   call assert_equal(1, l[0].lnum)
@@ -980,25 +981,32 @@
   call assert_equal(1, l[2].col)
   call assert_equal(10, len(l[2].text))
 
-  call setqflist([], 'r')
-endfunc
+  call g:Xsetlist([], 'r')
+endfunction
 
-func Test_long_lines()
+function s:long_lines_tests(cchar)
+  call s:setup_commands(a:cchar)
+
   let testfile = 'samples/quickfix.txt'
 
   " file
-  exe 'cgetfile' testfile
-  call XLongLinesTests()
+  exe 'Xgetfile' testfile
+  call XLongLinesTests(a:cchar)
 
   " list
-  cexpr readfile(testfile)
-  call XLongLinesTests()
+  Xexpr readfile(testfile)
+  call XLongLinesTests(a:cchar)
 
   " string
-  cexpr join(readfile(testfile), "\n")
-  call XLongLinesTests()
+  Xexpr join(readfile(testfile), "\n")
+  call XLongLinesTests(a:cchar)
 
   " buffer
-  e testfile
-  exe 'cbuffer' bufnr('%')
-endfunc
+  exe 'edit' testfile
+  exe 'Xbuffer' bufnr('%')
+endfunction
+
+function Test_long_lines()
+  call s:long_lines_tests('c')
+  call s:long_lines_tests('l')
+endfunction
diff --git a/src/version.c b/src/version.c
index f72ad18..9dfb18f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1941,
+/**/
     1940,
 /**/
     1939,
