0

ソース ファイルに次の行があります: [12 13 15]. vim では、次のように入力します。

:%s/\([0-90-9]\) /\0, /g

12 と 13 の後にコマを追加したいのですが、extraspace が挿入されるため、機能しますが、完全ではありません[12 , 13 , 15]

どうすれば目的の効果を達成できますか?

4

3 に答える 3

4

\1ではなく、置換式で使用し\0ます。

\1最初の によってキャプチャされたテキスト\(...\)です。パターンにエスケープされた括弧のペアがさらにある場合、 は、2 番目、3 番目などで\2始まるペアの間のテキスト キャプチャと一致します。\(\3\(

\0かっこで囲まれているかどうかに関係なく、パターン全体に一致するテキスト全体です。あなたの場合、これにはパターンの最後のスペースが含まれます。

[0-90-9]また、は と同じであることに注意してください[0-9]: 各[...]コレクションは 1 文字だけに一致します。とにかく、データでは「数字の後にスペースが続く」は「2桁の後にスペースが続く」と同じ場所で一致するため、たまたま機能します。(実際に 2 桁の後にコンマを挿入する必要がある場合は、 と書くことができます[0-9][0-9]。)

于 2013-01-24T13:46:14.743 に答える
2

「ソースファイルに次の行があります:...」

次に、:%s/...これを入力すると、一致した場合、すべての行で置換が行われます。またはそれはあなたのファイルの単一行ですか?

それが単一行の場合、グループ化する必要はありません。または[0-9]、単に:%s/ \+/,/g仕事をします。

于 2013-01-24T13:52:08.510 に答える
0

\zs良い答えはすでに興味深い解決策を示していますが、ここでは、試合の開始を示すを利用した別の解決策を示します。このパターンでは:

/[0-9]\zs /

検索されたテキストは です/[0-9] /が、スペースのみが一致としてカウントされます。クラスを使用して数字文字クラスを単純化できることに注意してください。その\d ため、次のコマンドが必要に応じて機能します。

:s/\d\d\zs /, /g  ; matches only the space, replace by `, '

複数の回線があり、これらの変更は特定の回線のみに適用されるとおっしゃいました。変更する行を視覚的に選択するか:global 、パターンに一致する行を検索してコマンドを適用するコマンドを使用できます。ここで、できるだけ正確ではない方法で変更する行に一致する式を作成する必要があります。オプションのスペース、a、および 2 桁の数字で始まる行 [のみが一致する行であり、他の行がない場合は、次のようにします。

:g/\s*[\d\d/s/\d\d\zs /, /g

および同様の および のpattern.txt の ヘルプを確認してください 。\ze:global


宿題: ヘルプを使用して、\zsこれがどのように機能するかを理解し、確認してください。

:s/\d\d\zs\ze /,/g
于 2013-01-24T14:14:19.403 に答える