7

複数行のMySQLクエリで構成されるファイルがあるとします。

SELECT foo, bar, etc
FROM blah
WHERE something or other
LIMIT etc

Vimでクエリを視覚的に選択し、それをMySQLにパイプして、クエリを確認し、新しいバッファを作成する方法はありますか?

明確化:表形式の出力は必要ありませんが、vimでさらに処理したり、スプレッドシートにインポートしたりできるもの(mysql --batchから取得するタブ区切りの出力など)(Ubuntu Linux)。

4

3 に答える 3

20

Dbextプラグインはこの動作をサポートしています。

SQLステートメントを視覚的に選択し、実行:DBExecRangeSQLして実行します。

結果は、現在のビューポートの下部にある新しい分割に返されます。

出力ウィンドウを制御するためのオプションはたくさんあります。:help dbext輝かしい詳細についてはを参照してください。

dbextの出力例

2012年5月1日更新

プラグインのバージョン15.0がリリースされ、この機能が組み込まれています。

デフォルトの-tフラグはオーバーライドできます

デフォルト設定:

let g:dbext_default_MYSQL_extra = '-t'

バッチ設定でオーバーライド

let g:dbext_default_MYSQL_extra = '--batch --raw'

DbextはオプションをMySQLにハードコードし-tますが、その行がdbext.vimから削除された場合、(現在のバージョンの)DB_MYSQL_execSqlの2278行で、-batchおよび--rawオプションを渡すことができます。

:DBSetOption MYSQL_cmd_options='--batch --raw'

表形式の出力を復元するには:

:DBSetOption MYSQL_cmd_options='-t'

私は自分のインストールでこれを正常にテストしました。

于 2012-04-12T14:13:02.220 に答える
2

dbextやその他のvimプラグインを提案してくれたMichaelとZsoltBotykaiに感謝しますが、生の出力を提供していないようです。

ここでマティアスの答えに触発されて、私は私の.vimrcに以下を入れました。これはvimscriptでの私の最初の試みなので、空腹者に注意してください...

function Query() range
    " use a temp file for result
    let s:tmpfile = system('mktemp')
    " single line copy of query followed by blank line
    echo system('echo '.shellescape(join(getline(a:firstline,a:lastline)," ")).
    \ ' > '.s:tmpfile)
    echo system('echo >> '.s:tmpfile)
    " pipe through mysql into temp file
    echo system('echo '.shellescape(join(getline(a:firstline,a:lastline),"\n")).
    \ '| mysql --batch --silent --raw &>> '.s:tmpfile)
    " and open in new buffer
    exec 'ed '.s:tmpfile
endfunction
" select query and <F5>
vmap <F5> :call Query()<cr>

クエリを視覚的に選択し、F5(または:call Query())を押すと、結果が新しいバッファーで開かれます。

Linux(mktempを使用)を想定し、.my.cnfから接続の詳細を取得します

于 2012-04-13T10:40:08.437 に答える
1

dbextプラグインを試してください。

しかし、このタスクにはにもいくつかあります。

于 2012-04-12T14:13:03.110 に答える