2013-07-10 37 views
0

您好,我有這個內容的文件執行當前行,然後尋找下一個和執行

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 

這適用於第一線,但我無法弄清楚如何做線的整個範圍。我知道我關閉..

+0

這將允許我使用1,18!sh,但不是1,.lastline。!我是否正確地做這件事 – Brett

回答

2

我不知道你是否真的需要它的功能。

方式1

你能簡單地做:

:%!sh 

執行一次全緩衝?

方式2

舉例來說,如果你有一些線在你的緩衝區不mysql開始,而你不想執行它們,你可以這樣做:

:g/^mysql/.!sh 

方式3

如果你真的想通過一個做一個,就像你在你的問題中所述,執行並移動到下一個mysql,EXECUT E,你可以做它作爲宏:

/^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 

然後

[email protected] 
如果你有500線

執行。

+0

這是什麼結束了爲我工作 函數! Myproc() r!mysql -uroot -ppass sas -e'SELECT name FROM mysql.proc;' 正常! gg /名稱 n 正常! dd %正常!我mysql -uroot -ppass sas -e'顯示創建程序 正常! ggdd0 %正常A \ G' 正常! gg0 正常! g let lastline = line(「。」) exec'1'。lastline。'sh' endfunction 它工作完美 – Brett

相關問題