vim:Surround.vimを使用して、状況に合った角かっこを自動的に置き換えます。

vim:Surround.vimを使用して、状況に合った角かっこを自動的に置き換えます。

私はvimを使用しています。サラウンド.vim (非常に長い)数学式(一致する括弧を含む)のすべての項目をsin(...)変更したいと思います。sin[...]

入力例:

 sin(A*(B+C))+sin((X+Y)*sin((A+D)*C))

希望の出力:

 sin[A*(B+C)]+sin[(X+Y)*sin[(A+D)*C]]

現在は、まずカーソルがある次の/sin\zs(式に移動するために検索し、一致する括弧を置き換えるために入力します。その後、(次の検索)と(前のコマンドの繰り返し)を使用してこれら2つのコマンドを繰り返すことができます。これはうまくいきますが、式が大きすぎて面倒です。sin(cs(]n.

完全なコマンドシーケンスを自動化する方法はありますか、またはvim完全に自動化された方法で内部交換を実行する方法はありますか?


vimの外で変換する全く異なる方法があるかもしれませんが、教育的な理由から、私は次の方法に興味があります。vimソリューション問題に。

ベストアンサー1

典型的なケースですが、再帰マクロ助けることができるキーシーケンスを再帰マクロに入れて実行します。 SEマスターを怒らせないように、Wikiの記事をまとめてみましょう。

  • qqq-qレジスタのクリア
  • qq- マクロ記録開始q
  • /\msin\zs(Enter-sin(カーソルを見つけて維持する(
  • cs(]-replace (...)with [...](余分なスペースを追加したくない場合は]代わりに使用)[
  • @q-qマクロを実行します。 (レジスタが空なのでまだ何もしませんq。)
  • q- マクロ記録を終了します。

次に、記録したばかりのマクロを実行します@q。それはすべてです。@q最後に、マクロ呼び出し自体を実行します。/sin(もう何も見つからない場合は、最初のエラーが発生すると停止します。

注:これらの変更をファイル全体に適用せずに行10と20の間にのみ適用したいのですが、再帰を使用して手動チェックを回避するには、正規表現の一致のみを使用して作成\%>...lできます。\%<...l望ましい限界間: /\m\%>9l\%<21lsin\zs(

おすすめ記事