【问题标题】:How to delete a word and go into insert mode in Vim?如何在 Vim 中删除一个单词并进入插入模式?
【发布时间】:2023-03-03 04:31:02
【问题描述】:

在正常模式下,我可以点击 Ctrl + E 删除其余的当前单词并进入插入模式。

我想删除整个单词,无论光标位置如何(当然是在单词内)。

【问题讨论】:

    标签: vim


    【解决方案1】:

    第二个问题:bPldw

    这将按顺序将您带到当前单词的开头,在光标前面插入默认寄存器,转到下一个字符(带您超过刚刚插入的文本的末尾),然后删除单词的其余部分。

    【讨论】:

    • 这也会删除单词后面的空格。应该是bPlde
    【解决方案2】:

    您可以通过键入“ciw”来使用“更改内部单词”来删除光标所在的单词。

    “inner”和“a”命令在 Vim 中非常有用,也可以尝试在 {} 块中使用“ci{”,或者如果您还希望删除 {} 字符,请尝试“ca{”。要将这些命令翻译成英文以便更好地记住它们,请尝试:“change inner { block”和“change a { block”。

    http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects的文档

    【讨论】:

    • "caw" 可以用来代替 "ciw" 相同的功能。
    • 而 'caw' 和 'ciw' 将替换整个单词,而 'cw' 将从当前光标位置更改为当前单词的结尾。
    • ciwcaw 并不完全相同:ciw 只删除单词,caw 也删除尾随空格。
    • :help objects 在 vi​​m 中阅读更多关于这些选择的信息。
    • 仅供参考,我相信cawca{ 中的a 代表“周围”
    【解决方案3】:

    或者,您也许可以使用键序列bdwi 删除当前单词并进入插入模式。

    【讨论】:

    • 您可以使用bcw 转到当前单词的开头然后更改单词,这样您就可以进入插入模式。
    • 如果您的光标已经在单词的第一个字符上,那么最终会删除前一个单词。
    • @WarrenPena 在这种情况下,只需使用dwi。请注意不要让警察注意到,因为 DWI 在大多数州都是非法的。
    【解决方案4】:

    回答您的后续问题:viwp

    v    -> start visual mode
    iw   -> select the 'inner word'
    p    -> paste - in visual mode it replaces the visually selected text.
    

    【讨论】:

    • 如何连续多次执行此操作?每次粘贴时,缓冲区都会填满我粘贴的单词。
    • @BenGartner 在Vim Tips wiki 找到这个:使用yiw 复制当前单词,将光标放在要替换的单词上,使用ciw<C-r>0。之后,您可以将光标放在下一个单词上并使用. 重新进行替换。
    • @BenGartner 如果您只想用 WORD_B 替换 WORD_A 的所有实例,那么您只需使用 vim 的 ex 模式,:%s/a/b/ga 可以是精确文本,也可以是正则表达式,b 是您将替换 a 的所有匹配项的内容。您可以使用 vim 的 / 模式测试正则表达式。如果您不想在所有行上替换,请将 % 替换为行号或范围。
    【解决方案5】:

    对于第一个问题,bcw 也可以。它的意思是“back 到单词的开头,change word”。不过我觉得ciw比较好记,意思是“changeinnerword”,只是一步而已。

    关于“使用粘贴替换”的第二个问题,我的解决方案是"_diwPdelete inner word 到一个你不关心的寄存器和paste 默认寄存器的内容。一个优点是您可以多次粘贴默认寄存器,因为它不会被污染。这是一个小复杂,所以我将其映射为nnoremap ,r "_diwP

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 1970-01-01
      • 2011-10-14
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多