vim中文手册的疑问

Vim、Emacs配置和使用
回复
bleastrind
帖子: 32
注册时间: 2007-08-26 7:23
送出感谢: 0
接收感谢: 0
联系:

vim中文手册的疑问

#1

帖子 bleastrind » 2007-09-02 15:56

http://vcd.gro.clinux.org/doc/pattern.html#%2F\@%20
\@! 零宽度否匹配,亦即,要求前面的匹配原在当前位置_不_匹配。
|/zero-width| {Vi 无此功能}
类似于 Perl 中的 '(?!pattern)"。
示例 匹配
foo\(bar\)\@! 任意后面不带 "bar" 的 "foo"
a.\{-}p\@! "a","ap","app" 等。后面不带 "p"
if \(\(then\)\@!.\)*$ "if " 后面无跟随 "then"

使用 "\@!" 要小心,因为很多地方一个模式可以不匹配。"a.*p\@!" 会匹配一
个 "a" 直到行尾,因为 ".*" 匹配所有行内的字符,而 "p" 不在行尾匹配。
"a.\{-}p\@!" 则可以匹配 "a","ap","aap" 等中的一项,只要它们不再紧跟
另外一个 "p",这是因为 "." 可以匹配 "p" 而 "p\@!" 不匹配这个 "p" 的后
面。

你不能用 "\@!" 去寻找匹配所在位置之前的否匹配。"\(foo\)\@!bar" 会匹配
"foobar" 中的 "bar",因为在 "bar" 匹配的位置上,"foo" 并不匹配。如果
不想匹配 "foobar",你可以尝试 "\(foo\)\@!...bar",但它不能匹配在行首出
现的 "bar"。最好的方法是用 "\(foo\)\@<!bar"。
也许是说明文档的错(从上下两处例子一个是app,一个是aap,它有可能有点笔误),也有可能是我的错,
大家来看看

a.\{-}p\@! 不能匹配amp,而能匹配appppp
注:“我/a.\{-}p\@!/e和//s试过aaaapppp,可以发现这个之所以全部高亮是因为它由"a a a apppp"4个匹配项构成,所以文档中的例子中应是app。
但是看它的解释却不是这样理解的。我们用am和ap两个来解释
“a.\{-}p\@!”在找到a后,会想尽快结束(最好能0个“.”就结束),
若a后面是非p字符,“非p”字符数目为0个,并且这0个字符后(即a后)满足p\@!,结束(注意,是满足了才结束的)
若a后面是p,假若“p”字符数目为0个,但此时,这0个字符后(即a后)app有p不满足p\@!”了!,所以无法结束,所以“.”只好继续增加,“p”字符数目为1个,此时ap后面还有个p,同上,直到p的字符数达2个,后面不再有p,终于结束,匹配了app[/quote]
头像
nihui
帖子: 1746
注册时间: 2006-10-21 12:03
来自: Shanghai
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 nihui » 2007-09-02 21:37

抱歉楼主。。。

也许是我还学得不够....────没看懂... :oops: :oops:
.

私人空间
附有 Magic Linux 2.1 最新开发日志~


미안하다, 사랑한다


欢迎来 #xfce-cn 中文频道~~
dexin
帖子: 8
注册时间: 2007-04-17 11:19
送出感谢: 0
接收感谢: 0

#3

帖子 dexin » 2007-11-01 9:09

路过。
kwyd
帖子: 3
注册时间: 2007-10-30 9:16
送出感谢: 0
接收感谢: 0

#4

帖子 kwyd » 2007-11-05 9:56

aap 放在这里是不对的,因为实际上是 a 和 ap 两个东西被匹配了,而不是aap完整的被匹配。

应该是manual本身的问题, 与中文翻译无关,看了一下英文的手册,这里用的也是aap.

lz可以考虑去提交个bug

:)
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#5

帖子 eexpress » 2007-11-05 10:12

a.\{-}p\@! 不能匹配amp,而能匹配appppp

没什么问题吧。就看了这句。
● 鸣学
回复

回到 “Vim和Emacs”