【问题标题】:Ways to delete a line in vimvim中删除一行的方法
【发布时间】:2015-11-05 19:33:52
【问题描述】:

我需要删除 vim 中的几行(第 42 行、第 424 行和第 4242 行)。我找到了 2 个可能的解决方案:

  • 将光标移动到该行的开头,然后按“dd”或

  • 键入 ':42d' 等...

但是,为了完成任务,我必须删除所有 3 行。我应该做这样的事情吗? :42d :423d :4240d

还是这个?

:4242d :424d :42d

完成此操作后,我需要将第 42 次出现的单词替换为另一个单词(将“Vader”替换为“Vader(父亲形象)”)。我通过输入 42/Vader 来查找“Vader”,然后进入“INSERT”模式并替换了这个词。我在这里遇到的问题是检查器告诉我原始文件不包含正确的信息。我认为行删除存在问题。还是我没有用“Vader(父亲形象)”替换“Vader”?

【问题讨论】:

  • 您通过 42/Vader 搜索第 42 场比赛对我来说看起来不错。

标签: vim


【解决方案1】:

如果你真的从行号开始,我会从头到尾删除,以避免偏移量计算。您可以在一个命令行中连接所有 :delete 命令:

:4242d|424d|42d

顺便说一句,你不需要 Vim。脚本解决方案可以使用 Unix 工具完成,例如 sed -i -e 4242d -e 424d -e 42d

但更多情况下,您不是从行号开始,而是导航到行,例如通过搜索。然后,通常的顺序是dd(删除当前行)、n(转到下一个匹配项)、.(重复)。

【讨论】:

    【解决方案2】:

    第一个任务可以完成:

    :4242dd|424d|42d<CR>
    

    或:

    4242Gdd424G.42G.
    

    注意相反的顺序,这是在整个任务中保持行号所必需的。


    gg42/Vader<CR>
    

    搜索第 42 次出现的 Vader 是一种更安全的方法,因为它从缓冲区的顶部开始。

    一旦你的光标在右边Vader,你可以这样做:

    cgnVader(father figure)<Esc>
    

    替换它。

    您可以使用未命名的寄存器来避免重新输入Vader

    cgn<C-r>"(father figure)<Esc>
    

    但最好将搜索放在匹配的最后一个字符上:

    /Vader/e<CR>
    a(father figure)<Esc>
    

    【讨论】:

    • 我忘了提一点:我被要求替换第 42 次出现的Vader,我注意到在整个文本中,这个词与“、”、“'”“。” “ ! “ 或者 ”?”。所以,如果我找到类似Vader's 的东西,我应该算数吗?我想我必须跳过这些事件......
    • 这是问你的人的问题。
    • 你是对的。同时我问他这个,这两种选择没有区别。
    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2011-04-28
    • 2023-03-02
    • 2013-04-19
    • 2013-01-04
    相关资源
    最近更新 更多