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