Vimのグローバル置換が行のすべての一致を代用するわけではありません


12

時々、私のグローバルな置換が一列のすべてのマッチを代用しない場合があります。確認で置換を行うと、それが見えることが確認され、一致する可能性のある複数の行で一致が見つかりましたが、別の行に進みます。

ファイル全体を操作するgまたはgcパラメータをで使用しています%

このファイルについて:

hello hello
hello
hello hello hello
hello

もし私が%s/hello/goodbye/g得るなら

goodbye hello
goodbye
goodbye hello hello
goodbye

私が.vimrc検索/置換について持っているのは

set hlsearch
set ignorecase
set incsearch

3
実際の例を挙げて、あなたのを見せてくださいvimrc
romainl

2
:echo &gd次のgように2番目のフラグを追加した場合、%s/hello/goodbye/ggまたはgフラグを完全に削除した場合、何が出力され、どうなりますか?の出力がの場合:echo &gd1set nogdefaultの最後に追加してみてくださいvimrc
user9433424 2016

1
いいね!理由はわかりませんが、デフォルトでは0に設定されていたのでset nogdefault、あなたが言ったように追加しました。ありがとうございました!
Nicolas Scotto Di Perto

回答:


12

たぶん、あなたまたはプラグインがオプションを有効にしていたのでしょう'gdefault'。このオプションは、g置換を実行するたびに自動的にフラグを追加します。

したがって、が有効になっているときに手動でフラグgを追加すると、'gdefault'2つのgフラグがあり、なしと同じ効果があるかのようになります。したがって、Vimはすべての行で最初に出現するパターンのみを置き換えます。

デフォルトでは、このオプションは無効になっていますが、無効にするために、vimrc:の最後に追加できますset nogdefault

または、プラグインがオプションを有効にしたと思われる場合は、次のようにして追跡できます。 verb set gd?

または、パターンのすべてのオカレンスを置き換えたい場合、gフラグを追加しないで(gdefaultすでにそうしているため)、パターンの最初のオカレンスのみを置き換えたい場合のオプションに慣れることができます。行にgフラグを追加します(2つのgフラグはnoneと同じであるため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.