Using :r !command, append the output to the next line.

Is it possible to append the command output from the cursor in the same line?

  • If you have xclip, you can type :r !command|xclip -i, then simply paste at the cursor. Note that all new-lines will be included in the pasted text.
    – AFH
    Jan 16, 2017 at 12:14
  • @AFH Nice workaround, but I am afraid that is not exactly what I was looking for. I would like to add that it works best when in insert mode before pasting.
    – Sathyam
    Jan 16, 2017 at 12:43
  • I would expect any added text to honour insert/overwrite mode, whatever mechanism might be used. You can reduce typing by using a script with a single letter (eg i) containing exec xclip -i, so that you need type only :r !command|i.
    – AFH
    Jan 16, 2017 at 12:53

1 Answer 1


How about the following mappings for insert and command-line mode:

" i_CTRL-R_`        Insert the output of an external command.
" c_CTRL-R_`
function! s:QueryExternalCommand( newlineReplacement )
    call inputsave()
    let l:command = input('$ ', '', 'shellcmd')
    call inputrestore()
    return (empty(l:command) ?
    \   '' :
    \   substitute(substitute(system(l:command), '\n\+$', '', ''), '\n', a:newlineReplacement, 'g')
inoremap <C-r>` <C-g>u<C-r>=<SID>QueryExternalCommand('\r')<CR>
cnoremap <C-r>` <C-r>=<SID>QueryExternalCommand('\\n')<CR>

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .