VIM:Regex \ zs \ ze问题

时间:2011-04-26 09:07:13

标签: regex vim

我正在尝试删除第2个字符到最后一个.word\模式的行中的所有文本(也删除点),但在点之前可能没有\。如果点之前有\,则删除直到上一个.word\模式。

我创造了这个简单的正则表达式:
^\w\zs.*[^\]\.\ze\w\+\\\s.*$
但这不起作用

我错了什么?

如果我不想删除到最后.word\但直到第二个.word\模式,那么代码是什么?

数据:
nnoremenu <silent> 97.330.10 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\
nnoremenu <silent> 97.330.11 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

必须是:
n Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\
n Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

1 个答案:

答案 0 :(得分:2)

您应该使用:

:%s/^\w\zs.*\\\@<!\.\ze\w\+\\\s

请注意,最后的\s表示在最后一个反斜杠后需要一个空格。

\@<!帮助器意味着:lookbehind否定断言(见:help /\@<!)。

另请注意,最终的.*$无用。