2

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

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

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

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

4

3 回答 3

4

您可以将特定列与\%c或匹配\%v

删除第 4 到第 50 列:

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

仅删除 IFF 有第 50 列:

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

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

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

哦,

  • .\{-}是零个或多个字符的非贪婪匹配。
  • \ze匹配结束指令,这会在第 50 列停止匹配
于 2012-06-22T09:53:08.433 回答
1

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

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

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

于 2012-06-22T09:44:54.877 回答
1

这是正则表达式部分解释

^是行首锚点。

.匹配任何字符。

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

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

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

于 2012-06-22T09:18:18.940 回答