while ("im the true Vim master");

2008-07-18

SQLファイルを実行する - その3 - mitszoの日記

| 15:16

nnoremap <silent> <F12> :<C-u>call <SID>execute_sql()<Return>
function! s:execute_sql()
  let _ = tempname()
  silent execute 'write !sqlplus -s '.g:oracleurl.' >"'._.'"'
  pclose
  silent! pedit +set\ noswapfile\ buftype=nofile `=_`
  call delete(_)
  wincmd P
endfunction
はてなブログ

実行するたびに中身が空のバッファが背後にたまっていく

function! s:execute_sql()
  let _ = tempname()
  silent execute 'write !sqlplus -s' g:oracleurl '>"'._.'"'

  pclose
  silent !pedit
  wincmd P
  setlocal bufhidden=wipe buftype=nofile noswapfile
  read `=_`
  1 delete _

  call delete(_)
endfunction
  • 結果表示用のバッファは一度閉じられたら不要なので、'bufhidden'を設定して削除する。
  • 結果表示用のバッファは一時的なものなので無名にしておく方が安全。
  • 空のバッファが増えていくのは、作成されたバッファを削除してないので:lsのリストに残ったままであることと、一度非表示になったバッファは:bunloadされて内容が消失するため。

編集中のバッファの内容の一部を実行

nnoremap <silent> <F12> :<C-r>=getcmdline() == '' ? '%' : ''<Return>call <SID>execute_sql()<Return>
vnoremap <silent> <F12> :call <SID>execute_sql()<Return>
function! s:execute_sql() range
  let _ = tempname()
  silent execute a:firstline.','.a:lastline 'write !sqlplus -s' g:oracleurl '>"'._.'"'

  pclose
  silent !pedit
  wincmd P
  setlocal bufhidden=wipe buftype=nofile noswapfile
  read `=_`
  1 delete _

  call delete(_)
endfunction
  • :help function-range-exampleを参照。

let g:oracleurl='<ユーザ>/<パスワード>@<接続先>'

command! -bar -nargs=* -range=% Sql  <line1>,<line2>call s:execute_sql(<q-args>)
nnoremap <silent> <F12> :Sql<Return>
vnoremap <silent> <F12> :Sql<Return>
function! s:execute_sql(oracleurl) range
  let url = a:oracleurl != '' ? a:oracleurl : g:oracleurl
  let _ = tempname()
  silent execute a:firstline.','.a:lastline 'write !sqlplus -s' url '>"'._.'"'

  pclose
  silent !pedit
  wincmd P
  setlocal bufhidden=wipe buftype=nofile noswapfile
  read `=_`
  1 delete _

  call delete(_)
endfunction

適当なコマンドを定義しておいた方が良いと思います。g:oracleurlは引数省略時のデフォルトにするとか。

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20080718
最近のコメント
あわせて読みたいブログパーツ
AX