他のウィンドウにコマンドを送りつける

本日のvimscript。やべぇ。すげぇ可能性を感じた。

" return current window number
function! MoveWindow(buf_name, split)
  let cur = winnr()
  if !buflisted(a:buf_name)
    return -1
  else
    let winnr = bufwinnr(a:buf_name)
    if winnr == -1
      if a:split
        exe "sp " . a:buf_name
      else
        exe "b " . a:buf_name
      end
    else
      exe winnr . "wincmd w"
    endif
  endif
  return cur
endfunction

function! SendCommand(buf_name, cmd)
  let cur = MoveWindow(a:buf_name, 1)
  if cur != -1
    exe a:cmd
    exe cur . "wincmd w"
  else
    echo "SendCommand : " a:buf_name . " not exists."
  endif
endfunction

" vimsh専用。
function! SendNormalCommand(buf_name, lines)
  for cmd in split(a:lines, "\n")
    call SendCommand(a:buf_name, "normal GA" . cmd . "\<CR>")
  endfor
endfunction

command! -nargs=1 VimShNewBuf call Vimsh( "_<args>_" )

" テスト
VimShNewBuf vimsh
call SendNormalCommand("_vimsh_", "gosh\n(+ 1 1)\n(exit)\n")

まだまだvimshで遊び中(笑

実行すると。こんな感じ。

sh-3.1$ gosh
gosh> (+ 1 1)
2
gosh> (exit)
sh-3.1$ 

他のウィンドウをリモート操作しちゃいます。

色々出来そうな予感。