例えば:read !date
などと打つと、dateの結果を挿入することができるけど、行で出力されてしまうので、カーソルの右側に出力したいという用途には使えない。
挿入モードやコマンドラインモードで<C-r>=
を使うと現在のカーソル位置にVim scriptの結果が挿入されるので、<C-r>=
を打った後、system('date')
と打つとやりたいことが大体できるが、最後の改行が入ってしまうのと、system('')
を打つのがめんどい。
そこで、<C-r>!<command>
で<command>
の実行結果から最後の改行を取り除いたものをカーソル位置に挿入できるようにした。
inoremap <expr> <C-r>! <SID>system()
cnoremap <expr> <C-r>! <SID>system()
function! s:system()
let command = input("!", '', 'shellcmd')
return substitute(system(command), '\n\+$', '', '')
endfunction
上記をvimrcに書いて
わたしは<C-r>!whoami<CR>です。
と打つと
わたしはtmsanrinshaです。
となる。