私はそれが古い質問であることを知っており、@ mykola-golubyevの方法は明らかにOP質問の特定のケースに対する最良の答えです(これは、同じvar名の複数のブロックがある可能性がある難読化されたコードを通過することを想定しています) ; しかし、そのような質問名で、Google検索からここに来る多くの人々は、おそらくVIMで変数の名前を変更するための、状況固有ではない方法を探します-それらはより簡潔にすることができます
私は誰もこの方法を提案していないことに驚いています:
*
:s//
新しい名前 /gc
これ*
は同じですgn
-カーソルの下にある単語の次の出現を検索し、それが最後に検索されたパターンになるので、代用コマンドで検索パターンを省略すると、VIMはこれを検索するパターンであると見なします。
少量のvarコピーの場合、さらに高速なコピー:
*
cw
NEWNAME <esc>
はn.
、他の発生についても繰り返します
出現を検索、cw
するコマンドで変更ワード、n
最後に検索用語の次の出現に行くと.
(ある最後のコマンド繰り返されNEWNAMEに変更単語を)
(これをすべて知っている私のクレジットは、Redditの@doomedbunniesに移動します)
別のクールなトリックはこれです:(@ nobe4へのクレジット)
*
cgn
NEWNAME <esc>
は.
、他の発生についても繰り返します
cgn
「(次のオカレンスを見つける)の結果を変更する」です。さて、これがあることを最後のコマンドは、次のものが必要ませんn
、もっと重要なのは、再び、次の発生にとても少ないストロークを行く、とする代替に必要n
とします.
。しかし、明らかに、これには発生をスキップする方法がないという欠点があります。
ここにいくつかの利点があります:
- マッピングも.vimrc(またはinit.vim)もないので、出会ったVIMコピーで使用できます(たとえば、VPSを設定したり、友達のマシンで簡単にVIMを構成したりすると、「クイック」の目的が損なわれます。 )
*
またはgn
単語の選択に使用するのは非常に迅速です-たった1回のキーストローク(まあ、1.5としましょう)
- 使用
*
またはgn
あなたが同じように、つまり内部の任意の一致を得ることはありませんになり:%s/<C-R>//gc
ません。:%s/\<OLDNAME\>/NEWNAME/gc
手でタイプするのに勝る:私は個人的に、\<
一致を単語全体に限定するために使用することを忘れがちです。
- スコープを使用し
n
ないと、不要な一致をスキップするための余分なストロークがいくつか発生します-スコープを制限するために必要な余分なストロークよりもさらに少ない可能性があります。通常の状況下では、変数はとにかく特定のコードブロックにローカライズされる可能性があります。