以下是在vi中删除第一个N
字符的命令:
:%s/^.\{N}//g
但是,我不理解^.\{N}
的含义;任何人都可以解释每个角色的含义吗?
如何扩展此命令以从行中删除中间字符?
例如从指定的行范围内删除第4到第50个字符
答案 0 :(得分:4)
删除第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
,您可以通过移动光标创建矩形选区。