Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。617件1こんにちは。ダブルクオートで囲まれていない範囲で置換をしようとして困っています。一度の置換でなくて構いません。vimで置換をしていまして、ソースコード中の/の前後に半角空白を入れる置換をしようとしています。b」のようにしたいです。以下、やってみたことです。前もって別の文字列にして、この処理の後にa//bにする処理を入れます。調べたところ「あいaうえお」を「あいbうえお」に置換するには:%s/\(.*)a\(.*)/\1b\2/gのようにすると良いとわかりました。前後に半角空白を実行ごとに増やさないようにしつつ、いまこのような置換コマンドを作りました。a.png"」のようになってしまいます。このため””で囲まれていない範囲で置換を行いたいです。都合の良いコードフォーマッタがありません。そのためvimのコマンドとして関数を定義し、.vimrcに書き、必要な時に呼び出したいと思います。最終的には僕の考えた最強の/を置換するコマンド、という微妙なものを作りたいと思います。調べたところ、条件が異なる回答ではありますが「かっこ[]で囲まれた文字以外をマッチさせたい」という質問の回答で先読みを利用すれば出来ると思います。マッチさせる箇所(A)を[^\[\]]+、させない箇所(B)を\[[^\[\]]+\]だとすると、先読みさせるにはA(?=B)、つまり[^\[\]]+(?=\[[^\[\]]+\])という形になります。これと末尾(もしくは全体)にマッチするパターンA$=[^\[\]]+$を組み合わせれば([^\[\]]+(?=\[[^\[\]]+\])|[^\[\]]+$)となります。https://ja.stackoverflow.com/a/9032/31797というのを見つけ、これを使えばうまくできるのではないかと考えています。先読みというのが初めてでvimの正規表現ではhttps://vim-jp.org/vim-users-jp/2009/09/20/Hack-75.htmlhttp://d.hatena.ne.jp/unk_pizza/20140311/p1を見て、条件となるパターン1とマッチさせたいパターン2の2つを用いてパターンマッチさせる方法であると理解しました。(自信はありません_(┐「ε:)_)私の場合、1でない全ての2を置換後文字列3にする否定先読み、否定後読みを用いるのが良いと考えました。前後に空白がある時はそれも含む3「/の前の文字列」半角空白/半角空白「/の後の文字列」となるのでしょうか。ここから正規表現にするところで止まっています。入れ子にならないという条件の元であれば、sedやperlのような正規表現の扱いを得意とする外部プログラムに投げればいいんじゃないでしょうか。"@ge'「入れ子も正規表現で解決しよう」というのは無しね。個の銅バッジ1手元のVim8.1では3つの#を\#という風にエスケープする必要がありました。