我正面对这段代码:
@store= Store.new(name:"Storename",
address:"Main road, 2",
phone:677879878,
city:"bluecity",
email:"storename@gmail.com.com")
it{ should respond_to(:toreplace)}
it{ should respond_to(:toreplace)}
it{ should respond_to(:toreplace)}
it{ should respond_to(:toreplace)}
it{ should respond_to(:toreplace)}
我想把它变成另一个:
@store= Store.new(name:"Storename",
address:"Main road, 2",
phone:677879878,
city:"bluecity",
email:"storename@gmail.com.com")
it{ should respond_to(:name)}
it{ should respond_to(:address)}
it{ should respond_to(:phone)}
it{ should respond_to(:city)}
it{ should respond_to(:email)}
我想“阻止”所有hashkeys,例如:name,来自contructor调用,并在()
内“阻塞”它们。
我想知道是否有一种方法可以“阻止 - 直到某个角色:
所有线条”,然后“阻止粘贴”,我只能“阻塞”每个人的第一个角色线!
注意:如果可能,我想避免使用宏和REGEX。虽然我也对宏观观点持开放态度,这可以改善我自己的想法。
答案 0 :(得分:4)
使用阻止选择/ yanking和粘贴无法按预期转换文本,除非您“准备”文本,特别是@store
语句。因为现在哈希键不在块中。
但是,您的任务可以通过宏完成。
qq0f:yb6+;pldt)5-q
用光标在@store
线上按上方键。按下后,您的光标将显示在address
上,然后按4@q
,您就可以获得所需内容。
请注意,宏中的6 and 5
是经过编码的。您可能想要调整它们取决于您的真实文本。但你明白了。
它的工作原理如下:
答案 1 :(得分:4)
正如@Kent所说,这不能用阻止甩/放。
我不会在不知道它们是什么的情况下尝试改进你的宏。
为了可能有相同问题的其他人,没有您的限制,这是一个有趣的方法。这可能会扩展为可重用的功能。首先,
:let args = []
接下来,选择带有hashkeys的行,并使用:进入Ex模式。范围'<,'>
将自动输入。完成
:'<,'>g/^/let args += [matchstr(getline('.'), '\k*\ze:')]
这应该将hashkeys保存在args
列表中;你可以查看:echo args
。最后,选择带有替换文本的行并输入
:'<,'>g/:\zstoreplace/s//\=remove(args, 0)
答案 2 :(得分:2)
这是一个稍微偏离主题的方式:
您首先要抓取@store
段:
yip
然后你自己粘贴它:
}p
然后使用:normal
在当前的一行和最后一行之间的每一行上运行一个简单的宏:
:,']norm 0f:bc0it{ should respond_to(:<C-v><CR>;C)}<CR>
故障:
:,'] from current line to last pasted line
norm run the following normal mode comman
0 jump to first column
f: jump to first :
b jump to beginning of word on the left
c0 change from cursor to first column
it{ should respond_to(: type that text
<C-v><Esc> literal <Esc>
; jump to first :
C change from cursor to EOL
)} type that text
答案 3 :(得分:1)
这是一种主要使用块yank / put命令的方法。
诀窍是,为了能够做一个不规则(不是方形)的块猛拉,首先要确保你想要的东西是在线的末端。
所以:
ggV5G
:normal f:D
输入 ?name
输入 Ctrl-V 5G$"ay
u
/toreplace
输入 Ctrl-V 11Gt)
"ap
gv:normal f:f dt)
输入 步骤1-6为您提供以下内容:
it{ should respond_to(:name )}
it{ should respond_to(:address)}
it{ should respond_to(:phone )}
it{ should respond_to(:city )}
it{ should respond_to(:email )}
步骤7(可选)是在关闭括号之前删除多余的空格,这样就可以得到:
it{ should respond_to(:name)}
it{ should respond_to(:address)}
it{ should respond_to(:phone)}
it{ should respond_to(:city)}
it{ should respond_to(:email)}