在vim中跳转到第一行不以特定字符串开头的行

4
假设我有以下缓冲区:
asdf
asdfotshne
asdfoensh
asdq
asdf
asdfothen
asdfghjkl;
qwertyuiop
zxcvbnm,.

我运行了:v/^asdf/norm 0命令。

我期望光标会跳转到第4行,但实际上它没有跳转,而是跳到了文件末尾。

为什么会这样呢?

3个回答

9

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

/\v^(asdf)@!

它执行负向先行断言并在第一次匹配时停止。

6

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

使用 gg? 更容易找到最后一个匹配的行,然后向下移动一行。


4

只是为了展示你可以使用 :v 来做到这一点。

:v/^asdf/throw ""

:v:g 会在抛出异常时停止运行。您可以通过抛出异常、不存在的命令或不完整/格式错误的命令来实现这一点。

:v/^asdf/^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接