🐾

置換を使ったvim操作: jsonのkey部分を抜き出したい

に公開2

はじめに

vim操作で特定部分だけ取り出したいときの私の操作例。
もっと簡単な方法があれば知りたいという意味も込めて投稿。

例1. jsonのkeyを取り出したい

let zzz = {
    aaa: 'test',
    bbbb: 'test',
    ccccc: 'test',
}

ざっくり操作内容

  1. vi{y: {...}内にカーソルを置いて中身をyankする。
  2. p: 下の方でペーストする。前の空白はvisualblockモードで消す。
  3. vip:塊を選択
  4. :を押してコマンドモードに移行すると'<,'>がすでに入力された状態になっているので以下のように置換の記述をして実行。
'<,'>s/\(.*\):.*/\1

:の前のkey部分をグループ1として、置換後の文字列にする。

awkコマンドを使うとき

3まで同じとして、コマンドモードで以下を実行する。
1列目の単語の最後の一文字だけ省いて表示している。

:'<,'>!awk {'print substr($1, 1, length($1)-1)'}

おわり

正規表現的な部分を入力するところでタイプミスしがちなのは自分だけ(?)
最初はマクロを使ってどこかのレジスタにkeyだけ追記していこうと思ったが、改行コードを入れるのはどうしたらいいのかわからず挫折。
似たような質問をしているstack exchangeなどを参考にawkによる別解も記載した。

Discussion

monaqamonaqa
'<,'>s/\(.*\):.*/\1

ここの部分についてですが、ノーマルモードでの操作に慣れている自分は

'<,'>normal f:D

とやっちゃうことが多いですねー。「: にカーソルを合わせてそこから行末まで消す」という操作を、行ごとに行うイメージです。

そゆっけそゆっけ

ありがとうございます!こちらのほうがわかりやすいし,簡単ですね。
fコマンドの存在を知ることができて助かりました。身の回りでvim使っている人がいないので一生気が付かなかったかもしれません笑