vim跳转到下一个不相同的行

时间:2013-03-29 21:10:37

标签: vim

我正在查看可能有几个连续相同行的文件。

有没有一种简单的方法可以跳到下一条不相同的线?

或者我希望能够折叠所有等于初始线条的线条,只显示折叠的线条数量。

2 个答案:

答案 0 :(得分:7)

您可以定义自己的fold-expr:

首先设置fdm:

:set fdm=expr

然后

:set foldexpr=getline(v:lnum)==#getline(v:lnum-1)?1:0

现在您可以通过键入 z M 进行测试,以关闭所有折叠,如果您很幸运^ _ ^所有重复的行都会折叠。

您可以输入 z R 打开所有折叠。

如果它有效并且你经常打开那种文件,你可以将上面的行放在你的.vimrc。(au with ft)如果只有一个时间的工作,你可以将模式行写入该文件。

答案 1 :(得分:1)

试试这个:

  :nmap <F2> "1y$<CR>/^\(<C-R>1$\)\@!<CR>

它将F2映射到:

  • 将当前行复制到寄存器1
  • 搜索(并移至)与寄存器1的内容不匹配的第一行

这看起来效果很好,除非您复制的行的文字转义了会混淆搜索正则表达式的字符。这是因为寄存器1只是在没有转义的情况下被放入搜索表达式中。这可能很难修复,但对于普通的日志文件来说,这应该不是什么大问题。

另外:如果你没有和vim结婚,只需要读取文件的非连续复制行,那么规范的UNIX方式是:

uniq filename

如果您想要使用vim但不需要对文件进行更改,请尝试:

:%!uniq

(如果您尝试后者,请务必退出而不保存)