144

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

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

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

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

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

4

9 に答える 9

201

これは、ファイル内のすべての行に対して行われます。

:%s/$/,/

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

1 つの方法は、視覚的な選択を行ってから、:. :'<,'>それはあなたのために記入され、残りの部分を入力します(追加するだけでよいことに注意してくださいs/$/,/

:'<,'>s/$/,/
于 2012-07-03T00:44:43.563 に答える
184

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

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

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

つまり、通常モードでは、ビジュアルで段落を選択し、vipビジュアル ブロック モードに切り替えて、すべての行にカンマCTRLVを追加し、 を押して確定します。$A,Esc

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

于 2012-07-03T11:38:57.073 に答える
49

別の優れた機能を使用した別のソリューション:

:'<,'>norm A,

を参照してください:help :normal

于 2012-07-03T05:30:10.413 に答える
41

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

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma
于 2012-07-03T00:38:26.603 に答える
10

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

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

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

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

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

同じコマンドは、次の 5 行::,+5s/$/,/やバッファ全体: など、行の範囲で動作できます:%s/$/,/

于 2012-07-03T00:45:14.400 に答える
3

'key'で始まる行の最後に'、'を追加する場合は、次を使用します。

:%s/key.*$/&,
于 2012-07-03T07:40:38.687 に答える
2
:%s/$/,/g

$は行末に一致します

于 2012-07-03T00:39:13.360 に答える
2

一連の行で最後のコマンドを非常に迅速に繰り返すことができるように、( <M-DOWN>alt down arrow) をマップしました。<DOWN>.このマッピングを使用すると、次のことができます。

A,<ESC>

次に、alt を押しながら繰り返し押して、各行の末尾にコンマを追加します。
これは、変更を取得する行と取得しない行を非常に適切に制御できるため、私にとってはうまく機能します。
(簡単に繰り返すことができるように、他の矢印も同様にマップしています.)

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

map <M-DOWN> <DOWN>.
于 2012-07-03T14:20:15.670 に答える
1

次のマクロを使用して、タスクを実行することもできます。

qqA,^[0jq4@q
于 2014-05-12T17:15:36.123 に答える