我想删除两列之间所有行的内容。我该怎么做呢?
例如,我想要这个:
abcdefg
hijklmn
opqrstu
如果我删除第 3 列到第 5 列之间的文本,就会变成这样:
abfg
himn
optu
我想删除两列之间所有行的内容。我该怎么做呢?
例如,我想要这个:
abcdefg
hijklmn
opqrstu
如果我删除第 3 列到第 5 列之间的文本,就会变成这样:
abfg
himn
optu
您的问题与此问题非常相似。
要删除文件中所有行的第3 到 5 列:
:%normal 3|d6|
要删除特定的行间隔(80 到 90),请使用以下命令:
:80,90normal 3|d6|
如果您不熟悉普通命令也不熟悉 | “运动”有一个快速的解释:
normal
命令在正常模式下执行以下命令;3|
将光标移动到第 3 列;d
) 直到第 5 列 ( 6|
)。对于自发编辑,我会通过 CTRL-V(通常映射到 Windows 上的 CTRL-Q)使用分块可视模式,然后d
将其删除。
如果你经常这样做,对于一个大范围/整个缓冲区,或者重复,我会使用一个在虚拟列中开始匹配的替换,并延伸(向上)到最后一列,就像你的例子:
%s/\%3v.*\%<7v//
您可以使用搜索和替换:
:%s/..\zs...\ze
或更一般的形式:
:%s/.\{2}\zs.\{3}\ze
其中第一个数字 (2) 是列的索引(从零开始),第二个数字 (3) 是该列的字符数。
解释:
:%s/
在整个缓冲区中搜索和替换。
.\{2}\zs
找到两个字符并在此处设置匹配的开头。
.\{3}\ze
找到三个字符并在此处设置匹配结束。
省略替换字符串,因为您要删除匹配项。
高温高压
我会按照以下方式进行:
:%s/^..\zs.*\ze..$//g
这将在开始时删除前两列和最后两列之外的所有其他内容。