在冒号后使用视觉块选择Vim移除/插入

在冒号后使用视觉块选择Vim移除/插入,vim,editor,vi,Vim,Editor,Vi,我有一段代码: fill_in "Name",with: "John" fill_in "Email",with: "user@example.com" fill_in "Password",with: "supersafe" 我想将:之后写的所有内容替换为用户。,这样我只需在用户之后添加名称、电子邮件和密码,即可完成代码。 fill_in "Name",with: user.name fill_in "Email",with: user.email fill_in "Password",wi

我有一段代码:

fill_in "Name",with: "John"
fill_in "Email",with: "user@example.com"
fill_in "Password",with: "supersafe"
我想将
之后写的所有内容替换为
用户。
,这样我只需在
用户之后添加
名称
电子邮件
密码
,即可完成代码。

fill_in "Name",with: user.name
fill_in "Email",with: user.email
fill_in "Password",with: user.password
此外,一种从所选视觉块的一行导航到另一行的方法(可能是vim插件?)当然是最佳的,尽管不是这里的要点

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

我用正常的
Ctrl-V
选择尝试了它,但是由于
字符被放置在每行的不同列中,因此我没有想要的行为


谢谢

只要突出显示您希望它运行的行就行了

非魔法正则表达式

s/.\{-}"\(.\{-}\)".\{-}:\zs.*/ user.\L\1/g
s/\v.{-}"(.{-})".{-}:\zs.*/ user.\L\1/g
非常神奇的正则表达式

s/.\{-}"\(.\{-}\)".\{-}:\zs.*/ user.\L\1/g
s/\v.{-}"(.{-})".{-}:\zs.*/ user.\L\1/g

这句话用引号表达了这件事。因为它使用了
\zs
匹配从冒号之后开始。因此,冒号后面的所有内容都将替换为
user.
和引号中所有内容的小写版本
\L
将后面的字符串转换为小写版本。

只需突出显示要在其上运行的行即可

非魔法正则表达式

s/.\{-}"\(.\{-}\)".\{-}:\zs.*/ user.\L\1/g
s/\v.{-}"(.{-})".{-}:\zs.*/ user.\L\1/g
非常神奇的正则表达式

s/.\{-}"\(.\{-}\)".\{-}:\zs.*/ user.\L\1/g
s/\v.{-}"(.{-})".{-}:\zs.*/ user.\L\1/g
这句话用引号表达了这件事。因为它使用了
\zs
匹配从冒号之后开始。因此,冒号后面的所有内容都将替换为
user.
和引号中所有内容的小写版本
\L
将后面的字符串转换为小写版本。

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

:g/with:/norm yi“$”\u ca␣用户。
C-r
Esc
v
`u`
  • g:/with://
    (适用于包含“with:”的所有行(如果缓冲区不包含其他行,这实际上是可选的)
  • norm
    正常模式下的以下“键”:

    • yi”
      (猛拉第一个引用值)
    • $
      (移动到行尾…)
    • “\u ca”
      (更改引用的文本)
      ␣用户。
      (从
      用户开始。
      )C-r
      (以及最初的拖动文本)
      Esc
      (完成)
    • v
      `.u`(粘贴位小写)
  • 这可能是口味的问题,但对我来说效果很好

    复杂?这里有一个窍门:我实际上所做的是在一行上执行编辑(用qq…q录制宏),然后

    将其应用于所有行

    演示:(注意它仍然使用了
    gu
    `.
    而不是
    v
    \`.u
    ):

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

    :g/with:/norm yi“$”\u ca␣用户。
    C-r
    Esc
    v
    `u`
  • g:/with://
    (适用于包含“with:”的所有行(如果缓冲区不包含其他行,这实际上是可选的)
  • norm
    正常模式下的以下“键”:

    • yi”
      (猛拉第一个引用值)
    • $
      (移动到行尾…)
    • “\u ca”
      (更改引用的文本)
      ␣用户。
      (从
      用户开始。
      )C-r
      (以及最初的拖动文本)
      Esc
      (完成)
    • v
      `.u`(粘贴位小写)
  • 这可能是口味的问题,但对我来说效果很好

    复杂?这里有一个窍门:我实际上所做的是在一行上执行编辑(用qq…q录制宏),然后

    将其应用于所有行

    演示:(注意它仍然使用了
    gu
    `.
    而不是
    v
    \`.u
    ):


    为了好玩,另一个宏:

    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
    
    qq开始在寄存器q中记录
    0转到第一列
    易“猛拉第一对引号的内容
    跳转到下一对引号
    “_c$更改,直到行尾,将上一个文本发送到黑洞寄存器
    用户。插入用户。
    “插入默认寄存器的内容
    退出插入模式
    guiw更改光标下单词的大小写
    停止录音
    

    我相信有几十种方法可以获得相同的结果。

    只是为了好玩,另一个宏:

    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
    
    qq开始在寄存器q中记录
    0转到第一列
    易“猛拉第一对引号的内容
    跳转到下一对引号
    “_c$更改,直到行尾,将上一个文本发送到黑洞寄存器
    用户。插入用户。
    “插入默认寄存器的内容
    退出插入模式
    guiw更改光标下单词的大小写
    停止录音
    

    我相信有几十种方法可以达到同样的效果。

    哇,这很有魅力。尽管我一直在寻找一种更简单的方法来实现这一点。我相信一些编辑器,如TextMate和SublimateText,可以在某个字符后阻止select。无论如何,谢谢你,我会从这个命令中学习!很好。它可以用
    \m
    ,\v`或者
    \V
    来断言
    的神奇性。我提供了自己的无正则表达式的答案(基于运动命令和重复命令),以便更好地衡量:)哇,这很有魅力。虽然我一直在寻找一种更简单的方法来实现这一点。我相信一些编辑器,如TextMate和SublimateText,可以在某个字符后阻止select。无论如何,谢谢你,我将从该命令中学习!很好。它可以使用
    \m
    ,\v`或
    \v
    来实现
    的魔力y拥有无正则表达式的答案(基于运动命令和重复命令