Vim在冒号后使用Visual块选择删除/插入

lll*_*lll 1 vi vim editor

我有这段代码:

fill_in "Name",with: "John"
fill_in "Email",with: "user@example.com"
fill_in "Password",with: "supersafe"
Run Code Online (Sandbox Code Playgroud)

我想更换之后所写的一切事:user.,所以我可以只需添加完成代码name,emailpassword经过相应的,user..

fill_in "Name",with: user.name
fill_in "Email",with: user.email
fill_in "Password",with: user.password
Run Code Online (Sandbox Code Playgroud)

此外,从选择的视觉块的一行导航到另一行的方式(可能是一个vim插件?)当然是最佳的,虽然不是这里的要点.

一个更简单的选择是不用替换它user.,而是删除它d$; 然而选择问题仍然存在.

我尝试了正常Ctrl-V选择但由于:字符放在每行的不同列中,我没有所需的行为.

谢谢

seh*_*ehe 5

或者,如果(像我一样)您更喜欢使用您手动编辑的命令,而不是输入疯狂的正则表达式:

:g/with:/norm yi"$"_ca"?user.C-r"Escv``.u`

  1. g:/with:/ (适用于包含"with:"的所有行(如果缓冲区不包含其他行,则这实际上是可选的)
  2. norm 正常模式下的以下"键":

    • yi" (猛拉第一个引用的值)
    • $ (移到行尾...)
    • "_ca" (更改引用的文本) ?user. (以...开头user.) C-r" (以及最初被拉动的文本) Esc (完成)
    • v``.u` (粘贴位小写)

这可能是一个品味问题,但对我来说效果很好.

复杂?这是一个技巧:我实际上做的是在一行上执行编辑(用qq... 录制宏q),然后

:%norm @q
Run Code Online (Sandbox Code Playgroud)

将它应用于所有行

演示:( 注意它仍然使用gu`` instead of.v \``.u):

在此输入图像描述