Vim

【Vim】シェルの実行結果を行としてではなく現在のカーソル位置に挿入する

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

となる。