这就是我的意思 -
说我在整个文件中都有这些
ActiveRecord::Base.connection.execute("select * from table1").each_hash do ..
ActiveRecord::Base.connection.execute("select * from table2").each_hash do ..
ActiveRecord::Base.connection.execute("select * from table3").each_hash do ..
client.query("select * from table1").each_hash do ..
client.query("select * from table2").each_hash do ..
client.query("select * from table3").each_hash do ..
Run Code Online (Sandbox Code Playgroud)
我想只替换ActiveRecord的each_hash调用each(:as => :hash),所以我得到:
ActiveRecord::Base.connection.execute("select * from table1").each(:as => :hash) do ..
ActiveRecord::Base.connection.execute("select * from table2").each(:as => :hash) do ..
ActiveRecord::Base.connection.execute("select * from table3").each(:as => :hash) do ..
Run Code Online (Sandbox Code Playgroud)
并使client.query行不受影响.
我知道我可以使用宏,但是如何使用vim的搜索/替换呢?我想过用这个:
%s/\.execute(.*).each_hash/ ...something... /g
Run Code Online (Sandbox Code Playgroud)
问题是,如何通过搜索和替换保留实际查询(什么来......哪些......是)?
\zsvim正则表达式中原子的完美用例.这告诉vim \zs在进行替换之前忽略任何事情(包括).
:%s/\.execute(.\{-})\.each\zs_hash/(:as => :hash)/
Run Code Online (Sandbox Code Playgroud)
更好的解释\zs可以在:help /\zs.