我正在使用VIM编辑如下所示的csv文件:
A00,A01,A02...
A10,A11,A12...
A20,A21,A22...我想删除每一行,从第二次出现的",“到结尾。所以我会被留下:
A00,A01
A10,A11
A20,A21我在第二行尝试了v,在第一行,然后G选择所有行,然后D删除,直到结尾。问题是Aij的长度不一定是一样的,所以这是行不通的.
发布于 2016-06-20 10:49:01
这里的normal命令很有用:
:%norm! 2f,D就这么做。
如果你想打高尔夫球,你可以记录宏,或者使用x@='...'格式。但是我觉得这种方法比正则表达式对给定问题的解决略好一些。
发布于 2016-06-20 10:39:57
使用:substitute,它将比块视觉模式工作得更好:
:%s/\v^.{-},.{-}\zs,.*//使用
\v到regex (非常神奇的模式) (:h /\v)^.{-},:在任何事情上都不贪婪,直到.第一个逗号(:h /\{).{-}\zs,:在第二个逗号之前是相同的,但这次我们告诉您,匹配是从逗号开始的(\zs -> Zone Start -> :h /\zs)。发布于 2016-06-20 12:16:50
使用:s的另一种可能是,您可以轻松地控制要保持的字段数量(出现了2个字段):
:%s/\v^([^,]*\zs,){2}.*//\zs包含在()组中,然后定义其相对于最后发现组的位置。
https://stackoverflow.com/questions/37920030
复制相似问题