【问题标题】:Replace word with what's ready to put in vi/vim?用准备好放入 vi/vim 的内容替换 word?
【发布时间】:2014-09-22 03:12:46
【问题描述】:

例如,我有:

rm -f $(NAME).elf $(name).d

第二个“名字”是错字,也应该是“名字”。

所以在'N',我做了yw,然后移到'n'。

我意识到如果我现在点击 cw 来更改它,我将处于插入模式 - 但我想啊,好吧,它只是 一个 额外的键 (ESC) 然后我就可以在 p 中输入更正的版本。

但在那种情况下,p 完全按照 u 的方式做了,它把 'name' 放回去了。我猜是因为“旧文本”也在更改时加载到寄存器中,我没有意识到。


是否有可以应用于单词/字母/等的“用寄存器替换”命令?

【问题讨论】:

  • 为什么不在“name”的第 n 位简单地做“4~”。它也会起作用
  • @Kabir name 只是一个例子,可能是eman 或其他错别字。
  • @Kabir - Kent 完全正确,但这对我也很有用!
  • @OllieFord 如果切换大小写,可以考虑guwgUwg~w。这样可以省去数字母的麻烦(4 可能是 40)。
  • @Kent 我假设那是“切换到较低”、“..upper”和“切换”?

标签: vim vi


【解决方案1】:

ywNAME 并移至 name 之后,您可以这样做:

viwp

或高尔夫升技:vep

【讨论】:

  • 完美 - 谢谢。但是你能解释一下吗?我想学习 vim 的命令,而不是记住组合:)
  • @OllieFord viw 视觉选择单词name,现在如果您按p,所选对象将被未命名的reg 值替换。
  • 啊,明白了!到现在我只用shift+V做视线。
【解决方案2】:

我经常需要这个,我写了一个插件来简化并允许最大速度:ReplaceWithRegister

这个插件提供了一个二合一的gr 命令,可以用寄存器的内容替换被{motion}/文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准. 命令快速重复。如果您不喜欢它,它的页面会提供替代链接。

你的例子

NAME 拉入默认寄存器,并将光标放在n 上,只需使用gregr 调用命令,e 是覆盖整个要替换的name 的运动。

【讨论】:

  • 谢谢 - 当我必须掌握基础知识时,我会检查一下。我被建议(youtube)首先学习基础知识,无需插件。我接受 Kent 的回答只是因为它使用默认配置回答了我的具体问题。
  • 这是一个好方法。两者之间的区别在于,根据 Kent 的回答,您将用 name 覆盖默认寄存器的 NAME,因此您只能进行一次替换(无需重新拉动),而我的可以像您一样频繁地重新应用想要(即使使用. 命令)。
  • 啊,我还没有意识到(这次只有一个错字)——我以为我仍然可以使用.。我想我肯定会很快回来安装您的插件 - 就像您说的那样,我确定我一直这样做(直到现在使用复制选择粘贴)!
【解决方案3】:

另一种方式:

ciw<Ctrl-r>0

ce<Ctrl-r>0

这将允许在不使用任何插件的情况下使用 . 重复,正如您在 cmets 中提到的,您目前正在避免使用它们。

【讨论】:

    【解决方案4】:

    您可以简单地将name 的大小写更改为gUiw

    【讨论】:

    • 请参阅 OP 上的 cmets,这是建议的,但我的意图是用寄存器中的任何内容替换单词的方法 - 即也适用于像 NMaE 这样的错字。
    猜你喜欢
    • 2019-05-23
    • 2016-09-11
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2015-01-24
    相关资源
    最近更新 更多