やましなぶろぐ

vimで行末にカンマを挿入する

置換ではなく矩形選択でもなくnormコマンドで実現する

行末にカンマを挿入したいことが多いけれども一番便利そうなのがnormalコマンドを使用する方法だと思う

🕒 Last mod: 2021-03-06


1. 行末にカンマを挿入したい

プログラム開発をしていると行末にカンマを挿入したい事が多い。

例えばPythonで変数リストをコピペしてきて、これらをリストにしたい場合など。

変数リストをコピペ後
COL1
Column2
Colname3
行末にカンマを挿入後
COL1,
Column2,
Colname3,

地味ですが使用する局面が多いので対応方法を整理しておきます。

2. 対応方法1:置換

まず真っ先に思いつくのが行末の置換を使用する方法。

コマンドラインモード
s/$/,/g

この方法は検索すると記事が出てくることも多いのである程度オーソドックスな方法だと思います。

ただ、私はこの方法に大きな欠点があると思っています。

この方法を実行すると検索結果のハイライトが行末に残ってしまってイライラします。

行末に文字を追加したいのに置換で対応するというのも直感的ではなくバッドハックな気がしています。

3. 対応方法2:矩形選択

2番目の方法は矩形選択を使用する方法です。

この方法は行末に文字を追加する処理として分かりやすい流れなのでこの方法での対応で問題ないでしょう。

行頭に文字列を追加したい場合にも同様に対応可能なのが分かりやすいポイントです。

  1. 矩形選択開始

  2. $で行末に移動

  3. Aでインサートモード

  4. ,を入力

  5. ESC

4. 対応方法3:normalコマンド

normalコマンドを知らずに利用できていなかったのですが処理内容を理解できればとても便利なコマンドではないかと感じています。

このコマンドではノーマルモードのコマンドを呼び出すことができます。

具体的に行末にカンマを追加する処理はこうなります。

  1. 対象行を選択

  2. :norm $A,<CR>

これだけで行末に端末を追加できます。

normコマンドを入力するのが手間なのがデメリットです。何かしらのキーにマッピングしておくことがおすすめです。

5. まとめ

行末にカンマを追加する方法を整理しました。

実践的な対応方法として矩形選択、あるいはnormalコマンドを使用する方法がおすすめです。

検索して直ぐに見つかる行末置換による対応方法は個人的にはあまりおすすめできません。

normalコマンドは今回の記事で紹介した方法の他にも応用範囲が広そうなのでもっと便利な使い方を模索します。