2016-10-16 12 views
0

に置き換える:Vimの検索と私は例を持っている

a, an [e, en] 
and [end] 
afraid [e'freid] 
... 

は括弧で検索することが可能ですか?そしてそれらの手紙で置き換えられた? 置換を>/\[.*\]:%s/e/ə/gcと組み合わせて検索したいと思います。

答えて

4

あなたがこれを行うことができます:

:%s/\[\zs.*\ze\]/\=substitute(submatch(0), 'e', 'ə', 'g')/ 

は、残念ながら、私はそこで動作するように/cを取得する方法を知りません。また

:%s/\%(\[.*\)\@<=e\%(.*\]\)\@=/ə/gc 

この1つはビット「ブルートフォース」であり、非常に長い行に遅くなることがあります。

+0

'/ c'は私のために働いていました... – Sundeep

+0

最初のものは、' [[]] *内でのマッチを制限するために '\ [\ zs [^]] * \ ze \]' : 'a、an [e、en] enable]' 'enable 'の' e'も同様に変更する必要がありますか? – Sundeep

+0

@Sundeep OPの元の検索パターンによれば、はい。 – melpomene

0

一つの方法(コマンドモードから):

:!perl -i -pe 'BEGIN{ sub f {$_ = shift; s/e/a/g; return "[$_]" }}; s/\[(.*?)\]/f($1)/e' % 
+0

'BEGIN {}'にサブルーチン定義をラップするのは無意味です。 – melpomene

+0

あなたのサブルーチンは現在置き換え中の文字列( 's ///')を上書きします( '$ _ = shift')。それが実際に動作する場合、それは確かに良いスタイルではありません。 – melpomene

0

私のPatternsOnText pluginは、:SubstituteInSearch(さらに多くのものの中から)コマンドを提供します。それは基本的に@メルポメーンの答えの単純化です。

:%SubstituteInSearch/\[.*\]/e/ə/gc 
関連する問題