为什么不能正确地使用vim命令打破这一行?

时间:2016-12-17 13:22:38

标签: regex vim

flip   翻转[左右变成右左] fork  叉子\分岔\岔口\复刻
:%s/^\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)$/\1;\2\3;\4/g

它变成了

flip   ;翻转[左右变成右左] fork  ;叉子\分岔\岔口\复刻

我想将它分成两行,何时只用一个vim命令添加分号。

尝试了三种不同的正则表达式,在我的vim上显示了相同的错误结果。(debian + vim)。

:%s/^\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)$/\1;\2\r\3;\4/g
:%s/^\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)$/\1;\2\n\3;\4/g
:%s/^\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)\([ a-zA-Z]\+\)\([\U4E00-\U9FFF ]\+.\+\)$/\1;\2\r\n\3;\4/g

enter image description here

如何使用一个vim命令获取以下输出?

enter image description here

1 个答案:

答案 0 :(得分:1)

以下内容可行:

:%s/^\([a-zA-Z ]\+\)\([^a-zA-Z ]\+\) \([a-zA-Z ]\+\)\([^a-zA-Z ]\+\)$/\1\2\r\3\4/g

只需将\r添加到您想要换行的正确位置的替换。

它还简化了事情,只是说,在行的开头查找任意数量的字母字符或空格,后跟任意数量的非字母字符或空格的字符,后跟空格,后跟任意数字字母或空格的后跟,后跟任意数量的字符,这些字符在行尾之前不是字母字符或空格。