在vim中将Ruby的hashrocket表示法更改为name: 'value'
notation的最有效方法是什么?
一些例子:
{
:id => site.id,
:primary_domain => site.name,
:wp_admin_url => site.wp_admin_url
}
{
id: site.id,
primary_domain: site.name,
wp_admin_url: site.wp_admin_url
}
{ :id => site.id, :primary_domain => site.name }
{ id: site.id, primary_domain: site.name }
Site.find_by(:access_token => params[:access_token], :primary_domain => params[:primary_domain])
Site.find_by(access_token: params[:access_token], primary_domain:params[:primary_domain])
你有一个宏吗?我的一些更有效的序列呢?使用搜索替换? 我能想到的最有效率,非常手动,需要一些重复:
ft:xpldf>
转到第一个:
,删除它并将其粘贴到单词后面,然后向前移动一个字符并删除=>
部分。
需要对哈希中的每个:name => value
部分重复这一过程。并且不能简单地运行N次,因为可能有一些:symbols
需要保留,就像在上一个例子中一样。
如何快速更改Hashrocket表示法?
答案 0 :(得分:6)
这种替换似乎可以解决所有三个样本的问题:
:%s/:\(\w\+\)\s*=>\s*/\1: /g
您可以使用它创建一个简单的自定义命令:
command! Notation %s/:\(\w\+\)\s*=>\s*/\1: /g
或稍微聪明一点:
command! -range=% Notation silent execute <line1>.','.<line2>.'s/:\(\w\+\)\s*=>\s*/\1: /g'
答案 1 :(得分:0)
仅供参考:这个正则表达式实际上已经破坏了我。
我有一些代码:Module::Class.where(:symbol => ...
因此,正则表达式试图从::
开始匹配。
相反,我使用了:
:1,$s/:\([^\:\s]\+\)\s\+=>/\1:/gc
答案 2 :(得分:0)
本着迭代改进的精神,以下内容还应保留键值对之间的空白(例如,当选择了火箭标签以对齐它们时,假设不需要保留火箭和值之间的空间): / p>
:%s /:(\ w +)(\ s *)=> \ s * / \ 1:\ 2 / g
应使用以下所有示例:
:key => value
Module::Class.where(:symbol => value)
{
:id => site.id,
:primary_domain => site.name
}
Site.find_by(:access_token => params[:access_token], :primary_domain => params[:primary_domain])
:symbol_one => some_method(:symbol_two).other_method(:symbol_3 => third_method(:symbol_4).attribute)
:to => :processing_payment,
:from => [:awaiting_contact, :awaiting_payment]