【问题标题】:Can I execute a MySQL query from Vim visual selection with output in a new buffer我可以从 Vim 视觉选择中执行 MySQL 查询,并在新缓冲区中输出
【发布时间】:2012-04-12 14:01:46
【问题描述】:

给定一个包含多行 MySQL 查询的文件,例如

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

有什么方法可以让我在 Vim 中直观地选择一个查询,通过 MySQL 进行管道传输,然后查看查询并生成一个新缓冲区?

澄清:我不想要表格输出,而是可以在 vim 中进一步处理或导入电子表格的内容(例如您从 mysql --batch 获得的制表符分隔输出) (Ubuntu Linux)。

【问题讨论】:

  • 不幸的是,Michael 的回答依赖于更改 dbext 源,但它是如此出色的脚本,我不得不接受它。 (我的回答确实符合我的要求,但没有 dbext 的所有功能和灵活性)
  • 感谢 David Fishburn(脚本维护者)和 Michael 的帮助,现在 dbext(从 v15.0 开始)完全可以满足我的需要!

标签: mysql linux vim


【解决方案1】:

Dbext plugin 支持这种行为。

可视化选择SQL语句,运行:DBExecRangeSQL执行。

结果将返回到当前视口底部的新拆分中。

控制输出窗口的选项有很多。详情请见:help dbext

2012 年 5 月 1 日更新

该插件的 15.0 版已发布,内置此功能。

可以覆盖默认的-t 标志

默认设置:

let g:dbext_default_MYSQL_extra = '-t'

批量设置被覆盖

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

Dbext 将 -t 选项硬编码到 MySQL,但如果从 dbext.vim 中删除该行,则在 DB_MYSQL_execSql(我当前版本)的第 2278 行,您可以传递 --batch 和 - -原始选项:

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

恢复表格输出:

:DBSetOption MYSQL_cmd_options='-t'

我在我的安装中成功测试了这个。

【讨论】:

  • Dbext 将会非常有用 - 谢谢。我的问题不够清楚,我需要非表格数据,然后我可以将其导出为 csv 或导入电子表格。我用 Dbext 玩过/用 Google 搜索过,但看不到任何 --batch --raw 选项。
  • @Ken 有一个选项dbext_default_MYSQL_cmd_options 我认为您可以将 --batch --raw 传递给。
  • @Ken 我从未使用过它,因此不确定语法,但在:help dbext-configure-options中提到了它
  • 看起来应该是:DBSetOption MYSQL_cmd_options='--batch --raw'
  • @Ken 这整个星期都在困扰着我,我的赏金代表感觉不义。我刚刚给维护者发了一个补丁来添加MYSQL_batch_output--batch)和MYSQL_raw_output--batch --raw)选项(1|0,都是默认0)。
【解决方案2】:

感谢 Michael 和 Zsolt Botykai 建议使用 dbext 和其他 vim 插件 - 但它们似乎不提供原始输出。

Matias' answer here 的启发,我在我的.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 获取连接详细信息

【讨论】:

    【解决方案3】:

    试试dbext 插件。

    但有一些others 用于此任务。

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多