我想删除两列之间所有行的内容。我该怎么做呢?如何从两列之间的所有行中删除文本?
例如,我想这一点:
abcdefg
hijklmn
opqrstu
要成为这一点,如果我通过去除5列3之间的文本:在d
abfg
himn
optu
我想删除两列之间所有行的内容。我该怎么做呢?如何从两列之间的所有行中删除文本?
例如,我想这一点:
abcdefg
hijklmn
opqrstu
要成为这一点,如果我通过去除5列3之间的文本:在d
abfg
himn
optu
对于自发编辑,我将通过CTRL-V(通常映射到Windows上的CTRL-Q)使用块式视觉模式,然后d
将其删除。
如果你经常这样做,对于一个大范围/整个缓冲区,或者重复,我会使用一个在虚拟列中开始匹配的替换,并且向上延伸到最后一列,就像你的例子一样:
%s/\%3v.*\%<7v//
您可以使用搜索和替换:
:%s/..\zs...\ze
或更一般的形式:
:%s/.\{2}\zs.\{3}\ze
其中第一个数字(2)是该列的索引(基于零),第二个数字(3)是该列所具有的字符数。
说明:
:%s/
搜索,并在整个缓冲区替换。
.\{2}\zs
找到两个字符并在此处设置匹配的开始。
.\{3}\ze
找到三个字符并在此处设置匹配的结束。
由于要删除匹配,因此省略替换字符串。
HTH
您的解决方案是基于字符的,而不是基于列的。这对于双宽度(例如中文)字符
@IngoKarkat你是对的。我没有读完你的全部答案(我在阅读CTRL-V后停止了)。 +1为您的答案。 – Tassos
你提的问题是非常相似的this one。
要删除的列3至5为所有行上的文件中:
:%normal 3|d6|
为了删除一个特定的线的间隔(80〜90),使用:
:80,90normal 3|d6|
如果您不熟悉普通命令和| | “运动”有云的简单说明:
normal
命令在正常模式中执行以下命令;3|
将光标移动到第3列;d
)直到第5列(6|
)。我会做下列方式:
:%s/^..\zs.*\ze..$//g
将在开始删除一切除了前两列,两底。
对于所有行,或只是当前行? – Jeremy
对于所有行,我也想知道第80行到第90行 –
我用一个例子更新了你的问题。你能确定它是准确的吗?你关心的数字是无关紧要的。 – Jeremy