quickfixリストウィンドウを引数付きでトグルする

[Tag]qを押し下げると、

  • カーソルがquickfixウィンドウにある時は:cclose
  • カーソルがquickfixウィンドウにない時は:copen

するようにしました。

1 function! Toggle_open_quickfix()

2         if &filetype ==# 'qf'

3                 command! Qftoggle cclose

4         else

5                 command! Qftoggle copen

6         endif

7 endfunction

8 noremap <silent>        [Tag]q  :call Toggle_open_quickfix() \| Qftoggle<CR>

Qftoggleコマンドを、
カーソルのあるウィンドウのファイルタイプによって再定義しています。


ここまではいいのですが、
:copenは引数に、quickfixウィンドウの高さをとるようなので
(使うかどうかは別として)それができるようにしてみます。


つまり、3[Tag]qと押し下げたときに
:copen 3が実行されればよいのですが、
どうもうまくいきません。

前置する数字の大きさに関わらず、
最大の高さでウィンドウが開かれているみたいです。

 1 function! Toggle_open_quickfix(cnt)

 2         if &filetype ==# 'qf'

 3                 command! Qftoggle0 cclose

 4                 execute 'Qftoggle0'

 5         else

 6                 command! -nargs=0 -count=10 Qftoggle0 copen <count>

 7                 execute 'Qftoggle0' . a:cnt

 8         endif

 9 endfunction

10 command! -nargs=0 -count=10 Qftoggle call Toggle_open_quickfix(<count>)

11 noremap <silent>        [Tag]q   :Qftoggle<CR>


直接、
:3Qftoggle
:Qftoggle 3
を実行したときは、どちらも3行のquickfixウィンドウが開かれるので
Qftoggleのコマンド定義は間違っていないと思います。


7行目での、引数の使い方が間違っているような気がします。