Vimの各行の終わりにテキストを追加する方法は?


116

Vimには、次のテキストがあります。

key => value1
key => value2
key => value1111
key => value12
key => value1122222

各行の末尾に「、」を追加したいと思います。前のテキストは次のようになります。

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,

誰でもこれを行う方法を知っていますか?これを達成するためにビジュアルブロックモードを使用することは可能ですか?


ここで同様の質問。
12

回答:


163

これはファイルのすべての行にそれを行います:

:%s/$/,/

ファイル全体ではなく行のサブセットを実行する場合は、の代わりにそれらを指定できます%

1つの方法は、視覚的に選択してからを入力すること:です。それは:'<,'>あなたのために埋めます、そしてあなたはそれの残りをタイプします(あなたが追加する必要があるだけであることに注意してくださいs/$/,/

:'<,'>s/$/,/

4
最後の行には余分'があります:'<,'>s/$/,/
cjg

なぜ必要がないのgですか?(:'<,'>s/$/,/g
–ThorbjørnEK Christensen 2018

@ThorbjørnE.K.Christensen /$/とにかく一度だけ一致するため。
ブバヤ

156

実際には、ビジュアルブロックモードを使用してこれを行う方法があります。$Aビジュアルブロックモードで押すだけで、選択範囲のすべての行の終わりに追加されます。追加したテキストは、を押すとすぐにすべての行に表示されますEsc

したがって、これは可能な解決策です:

vip<C-V>$A,<Esc>

つまり、通常モードでは、視覚的に段落を選択し、vip視覚的ブロックモードに切り替えCTRLV、すべての行$Aにコンマを追加してから,、を押しEscて確認します。

ドキュメントはにあり:h v_b_Aます。例のセクションには、それがどのように機能するかを示す図もあります:h v_b_A_example


1
いいえ、これは標準のVimです。ビジュアルブロックモードで(を使用してC-V)行を選択し、カーソルを行の最後に移動して、$すべての行に追加しますA。あなたはきっと:h v_b_A気に入るはずです。
glts

1
ああ、何が起こっているのかわかります!通常、<Esc>の代わりにCtrl-Cを使用して挿入モードを終了しますが、どうやらCtrl-Cではこれは機能しません。なんて変だ。
weronika

3
<C-V>ip代わりにを使用して、キーストロークを保存できますvip<C-V>
アーロン・トーマ2014年

1
@accoladeは、そのようにビジュアルブロックモードに入らず、機能しません。<CV>は、その方法で行う場合、もう一度発生する必要があります。
imagineerThat

@imagineerThat、奇妙な-それは私にとってはうまくいく-いくつかの非デフォルトオプションが原因であるに違いない。(ない'virtualedit'-私はそれをテストしました。)私はそれがクリーンなvimで動作しないことを確認します。メモありがとうございます!
アーロン・トーマ


33

exモードが最も簡単です。

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

10

代替コマンドは、視覚的な選択に適用できます。変更する行の上にビジュアルブロックを作成し、と入力し:て、コマンドラインが次のように初期化されていることを確認します:'<,'>。つまり、次のように、代替コマンドは視覚的な選択に対して機能します。

:'<,'>s/$/,/

そして、これはあなたが言及したように各行の終わりにコンマが本当に必要だと仮定すると、あなたの例でうまくいくはずの置換です。末尾にスペースがある場合は、それに応じてコマンドを調整する必要があります。

:'<,'>s/\s*$/,/

これにより、行の終わりの前にある空白がコンマに置き換えられ、末尾の空白が効果的に削除されます。

同じコマンドは、たとえば次の5行の:,+5s/$/,/場合、またはバッファ全体の場合など、さまざまな行で機能します:%s/$/,/


3

'key'で始まる行の終わりに '、'を追加したい場合は、以下を使用します。

:%s/key.*$/&,

または:g/key/s/$/,。を参照してください:help :global
romainl 2012

2

私が持っている<M-DOWN>にマッピングされた(下矢印ALT) <DOWN>.、私は非常に迅速に一連のライン上で最後のコマンドを繰り返すことができるようにします。このマッピングでできること:

A,<ESC>

次に、Altキーを押しながら繰り返し押して、各行の末尾にコンマを追加します。
これは、行が何をして何が変化しないかを非常によく制御できるので、私にとってはうまくいきます。
(他の矢印も同様にマッピングされているので、簡単に繰り返すことができます.

vimrcに貼り付けるマッピング行は次のとおりです。

map <M-DOWN> <DOWN>.

1
:%s/$/,/g

$は行末に一致します


2
それ$だけでなく、行に追加されます,
ZyX

2
/g行内のすべての出現箇所で置換を実行するために使用されます。$行には1つしかないので、安全にドロップできます。
romainl

ええ、$での私の間違い。/ gはhabbitからのものであり、はい、それはオプションです。
カルハート

1

次のマクロは、タスクを実行するためにも使用できます。

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