转到vim中不以某个字符串开头的第一行

时间:2013-09-09 09:59:44

标签: vim

假设我有以下缓冲区:

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

然后我运行:v/^asdf/norm 0

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

为什么?

3 个答案:

答案 0 :(得分:8)

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

/\v^(asdf)@!

它会进行负面预测并在第一场比赛中停止。

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

只是为了表明您可以使用:v执行此操作。

:v/^asdf/throw ""
每当抛出异常时,

:v:g都会停止。您可以使用throw,不存在的命令或不完整/格式错误的命令来执行此操作。

:v/^asdf/^