在Vim中删除重复的行很常见,通常有两种情况:
一、重复行紧挨着
– 删除连续相同的行,保留最后一行:g/^\(.*\)$\n\1$/d
– 删除连续相同的行,保留最开始一行:g/\%(^\1$\n\)\@<=\(.*\)$/d
上面这两个命令在处理连续相同行时作用相同,但是下面全文搜索重复行删除时区别是保留前面的还是后面的重复行。
– 类似的,删除连续多个空行,只保留一行空行g/^\s*$\n\s*$/d
– 删除重复行,结果不要求按原顺序:sort u
:let i=1|g/^/s//\=i.'{'/|let i+=1
:sort /^\d\{-}{/
保留后面的行:g/^\d\{-}{\(.*\)$\n\d\{-}{\1$/d
或者保留开始的行:g/\%(^\d\{-}{\1$\n\)\@<=\d\{-}{\(.*\)$/d
:sort n