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

Это было изменено вПочему не удается сломать строку с помощью команды vim?

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

ответ

0

Ниже будет работать:

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

Это просто добавляет \r к замене в нужном месте, где он кажется вы хотите разрыв строки.

Это также упрощает вещи, просто говоря: Ищите любое количество альфа-символов или пробелов в начале строки, за которым следует любое количество символов, которые не являются альфа-символами или пробелами, а затем пробелом, за которым следует любое количество альфа-символов или пробелов, за которыми следует любое количество символов, которые не являются альфа-символами или пробелами перед концом строки.

+0

Мое регулярное выражение делает белые пробелы в 3-й группе. –

+0

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