我可以执行一个MySQL查询从Vim视觉select与输出在一个新的缓冲区

给定一个由多行MySQL查询组成的文件,例如

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

有没有什么办法可以直观地在Vim中select一个查询,通过MySQLpipe道,查看查询并产生一个新的缓冲区?

澄清:我不希望表格输出,但可以在vim中进一步处理或导入到电子表格(如从MySQL – 批处理得到的制表符分隔的输出)(Ubuntu Linux)。

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将-t选项硬编码到MySQL,但是如果从dbext.vim中(在当前版本的DB_MYSQL_execSql中)的第2278行中删除该行,则可以传递–batch和–raw选项:

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

要恢复表格输出:

 :DBSetOption MYSQL_cmd_options='-t' 

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

感谢Michael和Zsolt Botykai建议的dbext和其他vim插件 – 尽管他们似乎没有提供原始输出。

我已经在我的.vimrc文件中提供了以下内容,受Matias的答案启发。 这是我第一次尝试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(或:调用Query()),结果在新的缓冲区中打开。

它假定linux(使用mktemp)并从.my.cnf获取连接详细信息

试试dbext插件。

但是这个任务还有其他的一些。