例えば: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です。
となる。