我有这段代码:
fill_in "Name",with: "John"
fill_in "Email",with: "user@example.com"
fill_in "Password",with: "supersafe"
我想用:
替换user.
之后写的所有内容,因此我只需添加name
,email
和{{1}即可完成代码},相应地在password
。
user.
此外,一种方式(可能是一个vim插件?)从所选择的视觉块的一行导航到另一行当然是最佳的,虽然不是这里的要点。
更简单的选择是用fill_in "Name",with: user.name
fill_in "Email",with: user.email
fill_in "Password",with: user.password
替换它,而不是用user.
替换它;然而选择问题仍然存在。
我使用正常的d$
选项进行了尝试,但由于Ctrl-V
字符位于每行的不同列中,因此我没有所需的行为。
感谢
答案 0 :(得分:5)
或者,如果(像我一样)你更喜欢使用你手动编辑的命令,而不是输入疯狂的正则表达式:
:g/with:/norm yi"$"_ca"␣user.
C-R"
Esc
v
``.u`
g:/with:/
(适用于包含“with:”的所有行(如果缓冲区不包含其他行,这实际上是可选的) norm
正常模式下的以下“键”:
yi"
(抽出第一个引用的值) $
(移至行尾...) "_ca"
(更改引用的文字) ␣user.
(以user.
开头) Cr "
(以及最初被拽的文字) Esc
(已完成) v
``.u` (小写粘贴位) 这可能是一个品味问题,但对我来说效果很好。
复杂?这是一个技巧: 实际上 做了什么,是在一行上执行编辑(用录制宏) qq ... q ),然后
:%norm @q
将其应用于所有行
演示:(注意它仍然使用gu
``。instead of
v \``.u
):
答案 1 :(得分:3)
这样可以突出显示您希望它运行的行。
非魔法正则表达式
s/.\{-}"\(.\{-}\)".\{-}:\zs.*/ user.\L\1/g
非常神奇的正则表达式
s/\v.{-}"(.{-})".{-}:\zs.*/ user.\L\1/g
这会在引号中捕获该内容。由于这使用\zs
冒号后的匹配开始。所以冒号之后的所有内容都被user.
替换为引号中的小写版本。 \L
将字符串转换为小写版本。
答案 2 :(得分:3)
只是为了好玩,另一个宏:
qq start recording in register q
0 go to the first column
yi" yank the content of the first pair of quotes
f"; jump to the next pair of quotes
"_c$ change until the end of line, sending the previous text to the black hole register
user. insert user.
<C-r>" insert the content of the default register
<Esc> exit insert mode
guiw change the case of the word under the cursor
q stop recording
我确信有很多方法可以获得相同的结果。