
次の例の行を含む初期ファイルの場合:
1
12
123
1234
12345
必要なファイルの状態は次のとおりです。
'1'
'12'
'123'
'1234'
'12345'
:%s/^/'/g
私はこれを行うために2つのコマンドを使用してきましたが、:%s/$/'/g
そのうちの1つを使用したいと思います。しかし、私が試したとき
:%s/[$^]/'/g
エラーが発生しました。
E486: Pattern not found: [$^]
私は括弧内に入れることが^
除外を意味することを知っているので、前に置くことは行の始まりと終わりを一致させることを意味すると思ったが、明らかに$
そのようなことは起こらない。
vimで行の始まりと終わりを一致させる方法は?
答え1
どうですか?
:%s/.*/'&'/
「ゼロ個以上の文字を一重引用符の前後の文字に置き換えます。」
答え2
^
そして、$
この意味(行の先頭または終わり)を維持しないでください[ ]
。文字セットを選択するために使用されます。内部的には、[ ]
ほとんどの正規表現演算子は意味を失います(一部の文字は特別な意味を取得するか、他の意味を取得します)。先頭はグループが否定されることを^
意味し、すべてと一致します。[]
とは別にこれらのキャラクター。したがって、を[^$]
除くすべての文字と一致することができます$
。 (および文字[$^]
のみが一致します。)$
^
マッチを始めたいならまたは行末、を使用してください/^\|$/
。|
または(Vimのデフォルトの正規表現モードでエスケープする必要があります)。
だから:
:%s/^\|$/'/g
これは、とが2つの個別の一致であり、基本的には1行の最初の一致でのみ機能するためにg
必要です。^
$
s
答え3
全体を貪欲に一致させることができれば、実際に行の先頭と終了を一致させる必要はありません。
:%s/\(.*\)/'\1'/
知っておくべき最も重要なことは、角かっこをエスケープして「キャプチャグループ」を作成し、キャプチャされたコンテンツを参照する\1
ために使用することです。
答え4
norm[al]
コマンドにA
関連付けられたコントロール、事前制御を使用して、既定では、コマンドの後にドキュメントの他のコマンドが来ることができないため、コマンドに前に追加された2番目の「仕様」を実行させますI
。:exe[cute]
:norm[al]
:help :normal
したがって、コマンドは次のようになります。
:exe "%norm A'" |%norm I'
ここでは、すべての行に対して%
変更が行われます。