Vimの練習。マクロでピラミッド作成し動かす

YouTube動画サムネイル: Vimの練習
Vimの練習

面白い動画。16進数のリストを作ってピラミッドを作って動かしている。

コマンドラインに出ている分だけだと何をどうやっているのかわからなかったので頑張って再現してみる。

:g や :v を使ったグローバルなコマンドはあまり使ったことがないので勉強になった。一括で何かしたい、確認したいときに役に立つ。

i
0x00
<Esc>
qq       ◀ マクロ登録
yyp
j
<C-a>
q        ◀ マクロ登録終了
254@q    ◀ 254回分マクロ実行
:g/./j16 ◀ 16行ごとに1行にまとめる
:%s/0x//g
qq       ◀ マクロ登録
jw
<C-v>
Gkw
$bgE
y
gv       ◀ 再選択
r        ◀ 選択範囲をspaceで埋める
G
o
p
q
q        ◀ マクロ登録終了
6@q      ◀ 254回分マクロ実行
:g/./m0 ※1 ◀
:g/   /d
:%s/\v(.)\1$// ※2 ◀
:se ts=1 sw=1 sb ※3 ◀
:%ce ※4 ◀
:3new
fu!F()
    for i in range(16)
        g/\v(\w)\1/> ※5 ◀
        v//< ※6 ◀
        redr ※7 ◀
        sleep 100ms
    endfor
    for i in range(16+37)
        norm vip< ※8 ◀
        redr
        sleep 100ms
    endfor
    u
endfu
call F()
※1 
:m {address} は「現在の行を指定行の下に移動する」
:m0 は「その行をファイル先頭に持っていく」になる

※2
置換。同じ文字が2つ連続して行末にあるものを削除

※3
se → :set の略
ts=1 → tabstop=1
タブ文字 \t を 1文字分の幅として表示
sw=1 → shiftwidth=1
インデントの幅を 1文字分 に設定
sb → softtabstop
インサートモードでタブキーを押したときに 何文字分のスペースを挿入するか
sbのみ。有効化 (softtabstop=shiftwidth)

※4 全行をセンター寄せ
%全行に対して、
ce: center

※5
(\w)\1 … 同じ単語文字の連続 (aa, bb, ...) にマッチ
これを右へ

※6
※5とマッチしないやつを左へ

※7
redr: redraw 再描画。これとsleepを合わせているので動きが見える。

※8
vip: 段落選択。つまり全体を左へ