vim:如何仅在列中替换某些内容

时间:2013-05-15 18:49:54

标签: vim replace

我想将符号“:”和“ - ”替换为文件第一列中的标签:

输入如下:

chr1:100-200 1 2 3e-4
chr2:300-400 4 5 6e-4

我希望输出为:

chr1 100 200 1 2 3e-4
chr2 300 400 4 5 6e-4

我知道如何通过“%s /:/ ^ I / g”进行全局替换,将“:”替换为选项卡。

但是因为有些条目的数字是科学记数法,例如3e-4,所以我不能只用“%s / - / ^ I / g”将“ - ”替换成标签。

有谁知道如何仅将替换指定给第一列?

感谢。

4 个答案:

答案 0 :(得分:5)

如何不使用g

%s/-/^|/

答案 1 :(得分:4)

您可以使用" Ctrl + V",激活" VISUAL BLOCK"模式,选择要更改的列,按" c",进行更改,然后" Esc",它将应用于所有选定的列。

答案 2 :(得分:2)

如果问题只有e,您可以使用%s/\([^e]\)-/\1^I/g查找-之前没有e的前缀。

答案 3 :(得分:0)

对于 first 列的特殊情况,您确实可以不用g标志。对于适用于任何列的常规解决方案,请使用<C-v>(在Windows上通常为<C-q>)建立块状视觉选择,然后使用{将替换限制为可视选择{1}} atom:

\%V