2012-09-17 49 views
1

是否可以使用:%s在一行中的某處找到匹配項,然後將其追加到行中?如何將正則表達式匹配添加到vim中的一行?

隨着下面作爲一個例子字符串,我期待像:s/\(value\)/\$\1/追加value到該行的結束,但它只是增加了$之前value直列

演示字符串:

This value is too damn high! 

預期輸出:

This is too damn high!value 

實際產量:

This $value is too damn high! 

回答

2

你可以去快&髒:

:s,\(.*\)\(value\)\(.*\),\1\3\2, 

但也有可能是更清潔的方式來做到這一點。

爲了找到&追加(如問題陳述):

:s,\(.*\(value\).*\),\1\2, 
2

在Vim中,01​​是文字美元符號。線尾匹配只是$。您可以使用\1替換第一個匹配的組,並使用\0來匹配整個比賽。因此:

:s#.*\(value\).*#\0\1 
+0

我不完全按照你在這裏做什麼,它被捕獲的所有東西都會自動放入'\ 0'組中嗎? – TankorSmash

+0

是的,'\ 0'被替換爲整個匹配模式,而'\ 1'替換爲第一個匹配*組*(用'\('和'\)'分隔)。我也使用'#'來分割:s命令,但是你可以使用你想要的任何字符。 –