2

Vimでファイルの編集範囲を設定して、後続のコマンドに適用する方法はありますか?関数の主要なリファクタリングを実行しようとしています。すべての変更(この場合は置換)をその関数だけに制限したいと思います。以前は、関数を新しいバッファーにコピーし、変更を加えてメインファイルにコピーして戻しましたが、もっと賢い方法があることを望んでいます。

関数の開始と終了にマークを設定し、置換コマンドの範囲にマークを使用できることを知っています。また、ビジュアルモードを使用して行の範囲を選択し、何かを実行し、gvを使用して再選択してから次のコマンドを実行しますが、これらの方法はどちらも、各コマンドの前に範囲を指定することを覚えていることに依存しています。

他に何か提案はありますか?

4

3 に答える 3

4

これが折り目のあるクールなトリックです:

  1. 関数全体を折ります。

  2. 置換を実行し、「確認」:s/foo/bar/c<Enter>のフラグに注意してください。これは、Vimでリファクタリングを行うときに不可欠です。c置換は、フォールド内のすべての行に適用されます。:sAFAIK、その方法で任意のExコマンドを実行できますが、私はこのトリックをand :g/以外で使用したことはありません:v

  3. ヒットy/nして、各置換を承認/拒否します。

  4. 最後の置換を承認/拒否すると、フォールドは即座に「閉じた」状態に戻ります。次の置換のために範囲を入力する必要はありません。

  5. GOTO 2

于 2012-05-02T15:53:59.563 に答える
0

vimが+textobjectsでコンパイルされていると仮定すると、関数をブロックとして選択できます。だからおそらくあなたは探しています:

va{:s/foo/bar

現在の{}括弧で囲まれた関数でのみfooをbarに置き換える。関数が中括弧で区切られていない場合は、いくつかの構文規則に従って範囲を選択する関数を作成できますが、おそらくこれで十分です。

于 2012-05-02T14:04:38.423 に答える
0

vimのNarowRegionプラグインを使用するhttp://www.vim.org/scripts/script.php?script_id=3075vimフォルダーに配置し、次のように使用します。

:[range]NR

このページを参照してください:https ://github.com/chrisbra/NrrwRgn

于 2012-05-04T13:23:07.377 に答える