【问题标题】:vim: replace blockvim:替换块
【发布时间】:2012-08-14 06:35:59
【问题描述】:

假设我有这个文本:

something "something else"
something here "just another quoted block"

我想用“只是另一个引用的块”替换“其他东西”,所以我这样做了:

/quot<enter>   (to jump to second quoted block searching for the string "quot")
yi"            (to yank inner text for current quoted block)
?else<enter>   (to jump back to the first quoted block wich contains "else")
vi"            (to visually select the quoted block)
p              (to paste yanked text)

这可行,但我想知道最后两个步骤是否可以替换为单个步骤,以避免视觉模式。我知道在击键方面并不是一个巨大的收获,但我认为 Vim 哲学会鼓励我正在尝试做的事情,每次我这样做时,我的大脑都会不断地询问这个命令。 :-P

到目前为止我尝试了什么:

r (replace) 只替换一个字符 c(更改)让我进入插入模式,并且不允许我粘贴文本。

【问题讨论】:

  • 只是好奇,为什么要避免可视模式?在这种情况下,它实际上是最快的。
  • 您不必精确使用i"a":您可以从行首开始执行yi"vi",它将作用于第一个引用的字符串在行中。

标签: vim


【解决方案1】:
"_di"P

删除黑洞寄存器的内引号;粘贴上次拉动的光标之前。

或者

ci"<Ctrl-R>0<ESC>

更改内部引号以检索最后一个 yank;离开插入模式。

【讨论】:

    【解决方案2】:

    使用我的ReplaceWithRegister plugin,最后两步将是gri"。它还提供grr(替换当前/[count] 行);虽然只省了一点打字,但我觉得这是必不可少的。

    【讨论】:

      【解决方案3】:

      击键明智,j$yi"k 然后vi"p 实际上可能是最快的。但是,如果您绝对必须进入插入模式,您可以j$yi"k 然后"_ci"&lt;C-r&gt;"ci"&lt;C-r&gt;0:help i_CTRL-R 运算符允许您将寄存器的内容置于插入模式。

      【讨论】:

        【解决方案4】:

        我通常尽量保持简单,使用我觉得更直观的日常命令:

        j
        yi"
        k
        ci"
        <ESC>
        p
        

        【讨论】:

        • 这是我之前尝试过的,但是 Change 命令会拉出我要替换的引号的内容,而 Paste 命令会粘贴与之前相同的字符串。而不是ci",我发现我必须使用vi"
        猜你喜欢
        • 2015-04-17
        • 1970-01-01
        • 2013-09-22
        • 1970-01-01
        • 2019-05-23
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多