Vim 执行当前行,然后搜索下一行并执行
嗨,我有一个包含此内容的文件Vim 执行当前行,然后搜索下一行并执行,vim,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 CREA
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
r!mysql-uroot-ppass sas-e“从mysql.proc中选择名称;”
正常!gg/namen
正常!dd
%正常!I mysql-uroot-ppass sas-e'显示创建过程
正常!ggdd0
%正常A\G'
正常!gg0
正常!G
设lastline=line(“.”)
回音尾线
正常!gg0
“我想从这里开始
.!嘘
**“返回正常搜索**
正常/mysql n
**“找到后执行该行**
%正常!!嘘
".!嘘
端功能
这适用于第一行,但我不知道如何处理整个系列的行。我知道我很接近 我不确定您是否真的需要一个函数 方式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行要执行。它将允许我使用1,18!sh但不是1,.lastline。!我做得对吗?这就是我最终的工作!Myproc()r!mysql-uroot-ppass sas-e“从mysql.proc中选择名称;”正常!gg/名称正常!dd%正常!I mysql-uroot-ppass sas-e'显示创建过程正常!ggdd0%正常A\G'正常!正常!G让lastline=line(“.”)exec“1,”.lastline“!它工作得很好
500@q