Vim Locationパラメータの検索と置換

Vim Locationパラメータの検索と置換

Vimの代替コマンドを使用して、位置引数をbashスクリプトの変数に置き換えようとします:s

例: Bashスクリプトで次のテキストを置き換えたいと思います。

python3 mymodule.py --dataversion $1

そして:

python3 mymodule.py --dataversion "${DATAVERSION}"

:s/\$1/"${DATAVERSION}"誘発しようとしましたE486: Pattern not found: $1

置換の代わりにパターンを検索すると、/\$1インスタンスが検出されます。 Vimの検索と代替コマンドでこのパターンが異なるのはなぜですか?

答え1

検索時に、Vimは自動的にバッファ全体を考慮します(無効にしていない場合)。'wrapscan'オプション - 最後にのみ検索します。)あなたの:substituteコマンドは次の点だけを考慮します。現在の行、逃したから:help :rangeそして、このコマンド(他のほとんどのコマンドと同様)は、デフォルトで現在の行のみを指定します。交換のためにバッファ全体を上書きするには、前に追加します。%これは次の略語です1,$

:%s/\$1/"${DATAVERSION}"

また、1行に複数の項目がある場合、$1最初の項目のみが置き換えられます。グローバル交換を追加します/g

コメントで述べたように、$エスケープは必須ではありませんが(パターンの終わりに特別な意味があります)、エスケープも可能です(いくつかの考えを避けることができます)。

関連情報