如果必須用模式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