【问题标题】:Deleting few selected characters from a file in vi/vim editor在 vi/vim 编辑器中从文件中删除几个选定的字符
【发布时间】:2012-06-22 09:14:14
【问题描述】:

下面是删除vi中第一个N字符的命令:

:%s/^.\{N}//g

但是,我不明白^.\{N}的含义;谁能解释每个字符的含义
如何扩展此命令以从行中删除中间字符?

例如从给定的行范围中删除第 4 到第 50 个字符

【问题讨论】:

  • 作为其他答案的补充,您可以在命令的开头指定行的范围。对于整个文件,使用:%s 中的 %。例如,要在第 7 行到第 47 行执行替换,您可以使用:7,47s,然后使用命令的其余部分。欲了解更多信息,请参阅:help :range

标签: vim command vi


【解决方案1】:

您可以使用 \%c\%v

匹配特定列

删除第 4 到第 50 列:

 :%s/\%4c.\{-}\(\ze\%50c\|$\)//

仅删除 IFF 有第 50 列:

 :%s/\%4c.\{-}\ze\%50c//

使用虚拟列(例如,如果您使用制表位,则很方便):

 :%s/\%4v.\{-}\ze\%50v//

哦,

  • .\{-} 是零个或多个字符的非贪婪匹配。
  • \zeend-of-match 指令,这会在第 50 列停止匹配

【讨论】:

    【解决方案2】:

    ^ 是行首锚点; . 是通用匹配,{N} 重复上一次匹配 N 次。

    要删除第 4 到第 50 个字符,请使用 :%s/^\(.\{4}\).\{46}/\1/g

    但是,使用矩形选择模式可能更容易:从普通模式移动到开始位置,然后点击Ctrl+V,您可以通过移动光标来创建矩形选择。

    【讨论】:

      【解决方案3】:

      这里是正则表达式部分解释

      ^ 是行首锚点。

      . 匹配任何字符。

      N表示前一个token将匹配的字符数

      {} 用于对计数进行分组。例如,您可以将其用作{1, 9}

      所以它说,From the beginning of the line, match N characters,其余的都是 VIM 的东西。

      【讨论】:

        猜你喜欢
        • 2011-03-08
        • 2012-11-11
        • 1970-01-01
        • 2020-08-30
        • 2015-05-23
        • 2015-06-04
        • 2013-12-27
        • 2011-02-19
        • 2011-09-17
        相关资源
        最近更新 更多