执行当前行然后搜索next并执行

时间:2013-07-10 09:23:59

标签: vim

我有一个包含此内容的文件

 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE add_customer\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE add_order\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE add_to_cart\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE add_to_wish_list\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE add_transaction\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE clear_cart\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE get_order_contents\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE get_shopping_cart_contents\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE get_wish_list_contents\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE receipt_retrieve\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE remove_from_cart\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE remove_from_wish_list\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE select_categories\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE select_products\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE select_sale_items\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE update_cart\G'
 mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE update_wish_list\G'

我想使用函数执行每一行并替换为命令输出,然后搜索以“mysql”开头的下一行并执行该行..直到文件结尾。

这是我的功能

r !mysql -uroot -ppass sas -e 'SELECT name FROM mysql.proc;'
    normal! gg /name<CR>n
    normal! dd
    %normal! I mysql -uroot -ppass sas -e 'SHOW CREATE PROCEDURE 
    normal! ggdd0 
    %normal A\G'
    normal! gg0
    normal! G
    let lastline = line(".")
    echom lastline 
    normal! gg0
"here is where i want to start
    .!sh
**"back to normal to search**
    normal! /mysql<CR> n 
**"when found execute the line**
    %normal !!sh
    ".!sh
endfunction

这适用于第一行,但我无法弄清楚如何做整行范围。我知道我很接近..

1 个答案:

答案 0 :(得分:2)

我不确定你是否真的需要它的功能。

方式1

你能做到:

:%!sh

执行整个缓冲区一次?

方式2

例如,如果缓冲区中的某些行没有以mysql开头,并且您不想执行它们,则可以执行以下操作:

:g/^mysql/.!sh

方式3

如果你真的想逐一进行,就像你在问题中所描述的那样,执行并移动到下一个mysql,执行,你可以用宏来做:

/^mysql<cr>          "search the pattern
gg                   "cursor back to top
qq                   "start recording to q
!!sh<cr>             "run first line as shell command, take output back
n                    "next command line (with pattern)
q                    "stop recording

然后

500@q

如果要执行500行。