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