Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 执行当前行,然后搜索下一行并执行_Vim - Fatal编程技术网

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