4

假设我有以下缓冲区:

asdf
asdfotshne
asdfoensh
asdq
asdf
asdfothen
asdfghjkl;
qwertyuiop
zxcvbnm,.

然后我跑:v/^asdf/norm 0

我希望光标转到第 4 行。但它没有,它转到文件的末尾。

为什么?

4

3 回答 3

8

如果您的光标位于文件的第一行,并且您想转到第一个不以 开头的行asdf,则可以使用以下search表达式:

/\v^(asdf)@!

它进行负前瞻并在第一场比赛中停止。

于 2013-09-09T10:07:30.333 回答
6

:v不用于移动光标,而是对所有不匹配的行执行操作。因此,它会扫描文件的每一行,并对norm 0不以 asdf 开头的每一行执行你的。因此它会在 的第一个字符处跳转qwertyuiop,然后在 处执行相同的操作zxcvmnm,.

使用 查找最后一个匹配行会更容易gg?,然后向下一行。

于 2013-09-09T10:04:35.187 回答
4

只是为了表明您可以使用:v.

:v/^asdf/throw ""

:v:g在抛出异常时停止。您可以使用 throw、不存在的命令或不完整/格式错误的命令来执行此操作。

:v/^asdf/^
于 2013-09-09T14:21:22.740 回答