VimShell に Clojure のブロックを送る

以下のコードがあって、(defn ..) ブロック内にカーソルがあるとき、(defn ..) ブロック全体を VimShell に送信する。

(defn foo [arrrrg]
  "Foo function!"
  (println (str 'foo arrrrg)))

普通、行頭に "(" あるよね?みたいな前提でうごきます。あるよね?

function! s:vs_send_clojure_block ()
  let l:old_reg_slash = @/
  execute "normal! ?^(\<CR>v%:VimShellSendString\<CR>"
  let @/ = l:old_reg_slash
endfunction

command! VimShellSendClojureBlock call s:vs_send_clojure_block()
nnoremap <buffer> <silent> ,s :VimShellSendClojureBlock<CR>