39

:%s/one/two/の最初の出現をoneに置き換えtwoます。代わりに、最後の出現を置き換える簡単な方法はありますか?

私はそれが行末の隣にあると仮定することはできず、次のように「つかむ」ために使用する最後の出現の周りに一意のものは何もありません:

one two three one two three one two one two one two ...
4

3 に答える 3

53

最も簡単な方法は、一致の前に任意のテキストを許可し、次を使用して一致した領域を指定すること\zsです。

:%s/.*\zsone/two/
于 2012-08-08T13:49:27.790 に答える
13

.* は貪欲であるため、これは機能するはずです。

:%s/\(.*\)one/\1two/
于 2012-08-08T13:49:06.603 に答える
3

1行の単語を置き換えたい場合は、次のように言うこともできます。

$?one<CR>cetwo<ESC>

これは行の終わり($)に移動し、単語one?one<CR>)を逆方向に検索します。次に、文字列を含む単語の末尾( )までのすべてを( )変更します。もちろん、、、などで変更できます。次の17文字を変更すると言うこともできます。cetwoeEfFc17l

于 2012-08-08T13:54:29.877 に答える