【VI】VIM ~ 置換 / 変換 ~

◾️はじめに

vim で、置換・変換するTipsを徐々にまとめていく

目次

【0】ポイント
【1】置換を利用して囲み文字を入れる
【2】特定パターン時にマスクする
【3】大文字⇔小文字変換
 1)大文字 ⇒ 小文字
 2)小文字 ⇒ 大文字

【0】ポイント

* 以下のような形で置換していけばいいが、
 ChatGPTに質問しながらやればできてしまう

基本形

:%s/【置換前】/【置換前】/g

【1】置換を利用して囲み文字を入れる

1)対応例

# 全置換
:%s/\(\w\+\)/"\1"/gc

# 全置換(確認無し)
:%s/\(\w\+\)/"\1"/g

https://github.com/clear-code/ClearCode.vim/issues/7

2)解説

:%s/置換前/置換後/gc

% : ファイル全体を対象とする
s : 置換する
g : 行にある全てのマッチした文字列を置換する
(c : マッチした文字列を1つずつ確認しながら置換する)

3)サンプル

# 実行前(コピーしてVIMに張り付ける)
table3
table1
table2
table1
table3
table2
table1
table4
table2

# 実行後
"table1"
"table1"
"table1"
"table2"
"table2"
"table2"
"table3"
"table3"
"table4"

【2】特定パターン時にマスクする

デバッグに役立つkubectlコマンド ~ kubectl get/describe/api-resources ~
https://dk521123.hatenablog.com/entry/2025/03/21/151944

の「例2:オブジェクトの詳細情報」で以下のようにマスクしたい

置換前

SecretName: demo-secret

# demo-secretは可変

置換後

SecretName: *****

1)対応例

:%s/\(.*\)SecretName:\s\+\S\+/\1SecretName: *****/g

2)解説

* \(.*\) は行の先頭から SecretName: までの任意の文字列をキャプチャ
* SecretName: はそのままの文字列を検索します。
* \s\+ は、1回以上の空白文字(スペースやタブ)にマッチ
* \S\+ は、1回以上の非空白文字(アルファベットや数字など)にマッチ
 => これが実際に置換対象となる「可変な部分(demo-secret)」
* \1 は最初にキャプチャした部分(SecretName: より前の文字列)を再利用

【3】大文字⇔小文字変換

https://linuxfan.info/vim-upper-lower

1)大文字 ⇒ 小文字

* 大文字に変換したい場合は、「U」(Shiftキーを押しながらUキー)

2)小文字 ⇒ 大文字

* 大文字に変換したい場合は、「u」(何も押さずにuキー)

関連記事

VIM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/09/15/233623
VIM ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/09/01/000000
VIM ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/08/04/225503
VIM ~ VimGolf ~
https://dk521123.hatenablog.com/entry/2023/06/09/000000
VI エディタ
https://dk521123.hatenablog.com/entry/2016/04/27/232800
ネットワーク系コマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/07/27/214633
デバッグに役立つkubectlコマンド ~ kubectl get/describe/api-resources ~
https://dk521123.hatenablog.com/entry/2025/03/21/151944
シェル ~ 文字列置換 ~
https://dk521123.hatenablog.com/entry/2023/10/25/000000