如果必须用模式1和模式2之间的所有线以逗号替换换行符,我该如何执行?在vim中用逗号替换“具有特定模式的两条线”之间的所有换行符
来源:
Pattern 1
abcd
edfgads asd
adsad
...
Pattern 2
到:
Pattern 1, abcd, edfgads asd, adsad, ..., Pattern 2
如果必须用模式1和模式2之间的所有线以逗号替换换行符,我该如何执行?在vim中用逗号替换“具有特定模式的两条线”之间的所有换行符
来源:
Pattern 1
abcd
edfgads asd
adsad
...
Pattern 2
到:
Pattern 1, abcd, edfgads asd, adsad, ..., Pattern 2
如何
:%s/Pattern 1\_.\{-}Pattern 2/\=join(split(submatch(0), "\n"), ", ")/g
搜索
Pattern 1 # obvious
\_. # any character including newline
\{-} # repeat non-greedily (vim's way of writing *?)
Pattern 2 # obvious
替换部分应该是没有明确的解释。
但是,我不想跟逗号替换所有换行符。模式1和模式2之间只有某些行。并且Pattern1 ... Pattern2在文件中出现很多次。 – Rakesh
哎呀,对不起,误解了这个问题。 – streetturtle
使用Pattern 1
和Pattern 2
如地址,见:help cmdline-ranges
:
:/^Pattern 1/,/^Pattern 2/-1 s/\n/,/
匹配样式1线
:g/Pattern1/norm V/Pattern2^MgJ
:g/
,运行normal
模式击键:
v
isual尽可能选择... /
搜索模式2gJ
加入选择的线路,无需添加空格NB。键入^M
与Ctrl-V <Enter>
,或Ctrl-Q <Enter>
谢谢,它的工作原理。 – Rakesh