如何结合和否定这两种模式?

mar*_*lon 5 vim

在 VIM 中,我想删除不是 2 或 3 个字符的任何行。

:g/^..$/d
:g/^...$/d
Run Code Online (Sandbox Code Playgroud)

那些删除 2 或 3 个字符的行。如何将两者合二为一并取反,即'不要删除2或3个字符行'

fil*_*den 5

您可以使用:v在与模式不匹配的行上执行命令。

这需要您使用单个模式......在您的情况下,您可以通过使用\=修饰符来选择匹配最后一个项目来轻松完成。

因此,要删除所有包含 2 个或 3 个字符的行,您可以使用:

:g/^...\=$/d
Run Code Online (Sandbox Code Playgroud)

并删除2 或 3 个字符以外的所有行:

:v/^...\=$/d
Run Code Online (Sandbox Code Playgroud)