在vi / vim编辑器中删除文件中的几个选定字符

时间:2012-06-22 09:14:14

标签: vim command vi

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

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

但是,我不理解^.\{N}的含义;任何人都可以解释每个角色的含义吗? 如何扩展此命令以从行中删除中间字符?

  

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

3 个答案:

答案 0 :(得分:4)

您可以使用 \%c \%v

匹配特定列

删除第4到第50列:

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

要仅删除IFF,则有第50列:

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

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

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

哦,

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

答案 1 :(得分:1)

这是正则表达式部分解释

^是行首的锚点。

.匹配任何字符。

N表示前一个令牌匹配的字符数

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

所以它说,From the beginning of the line, match N characters,剩下的就是VIM。

答案 2 :(得分:1)

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

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

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