Vim Tips Wiki
Tip 952 Printable Monobook Previous Next

created 2005 · complexity basic · author hari_vim · version 6.0

If you are using command line completion while showing matches (^D etc.), often the display scrolls in such a way that at least part of the text in the buffers is not visible anymore. If you want to redraw the screen, you have the option of switching to the command-window, which will refresh the screen anyway, but the following shows a way to redraw the screen without needing to do that.

Install the genutils.vim script#197 plugin or just copy paste the GetVimCmdOutput() function into your vimrc, and create the following cmap:

cnoremap <C-X><C-L> <C-R>=GetVimCmdOutput('redraw')<CR>

You can now type ^X^L anytime on the command-line even in the middle of typing a new command. In normal mode you can always use ^L directly so this is not needed, if you enter Ex mode through gQ command (:help gQ), you can use this to quickly redraw the screen.

GetVimCmdOutput() from genutils.vim[]

(This function was minimally adapted from version 2.5 of genutils.vim, released 2009-09-17, still most current as of 2014-01-08)

" function wrapper for :execute (an Ex command that runs Ex commands)
" adapted from genutils.vim 2.5 ( )
function! GetVimCmdOutput(cmd)
  let v:errmsg = ''
  let output = ''
  let _shortmess = &shortmess
    set shortmess=
    redir => output
    silent exec a:cmd
  catch /.*/
    let v:errmsg = substitute(v:exception, '^[^:]\+:', '', '')
    redir END
    let &shortmess = _shortmess
    if v:errmsg != ''
      let output = ''
  return output
" shorthand Exe()
let Exe=function('GetVimCmdOutput')