Vim上でテキストにフィルタをかける

「まったく、何をやっているんだ、おまえらっ」
ドラマ「お迎えデス。」4話で上司の早坂ひららちゃんが、部下の鈴木亮平に向かってドスの効いたかわいい声で叱責してました。
机をばんっと叩いて。その手も小さくてかわいい。
その手があまりにもかわいすぎて、私としては、Vimを使ってほしいですねえ。手が小さいとブラインドタッチは無理に感じますが、ピアノだって天才こどもはいますし、天才こどもVimmerがいてもいいと思うんです。4歳児がVimを手の延長のように使いこなしていたら、私はその子のことをビル・ジョイぐらい尊敬すると思います。

コマンドラインではパイプを使うことにより、小さなプログラムを組み合わせてより大きな成果を得ることができますが、Vim上からもコマンドラインと同じようにパイプを用いてプログラムの組み合わせによるフィルタを行うことができます。

下画像は、fizzbuzz問題のC言語ソースをVim上で開いている時の画面です。
fizzbuzz-vim-001

上記ソースから、Vimのノーマルモードで:!indentと実行することにより、下の画像のようにソース整形されます。
(indentコマンドはapt-get等でインストール必要です)

fizzbuzz-vim-002

次は、局所的に行番号を付けてみましょう。さらにはその場所をコメントアウトしてみます。
まずは、SHIFT-Vで行選択します。

fizzbuzz-vim-003

:!の後に続き、コマンドラインで実行するのと同じように、cat -n | perl -pe ‘s/|^(.*)$|/*$1*/’を実行すると、下のようになります。

fizzbuzz-vim-004

他GUIツールへ転送することもできます。選択部分をVimから、leafpadへ抽出してみましょう。
SHIFT-Vで選択して、
fizzbuzz-vim-005

:!leafpad、です。

fizzbuzz-vim-006

選択範囲の中で使われている単語を整理してみましょう。

fizzbuzz-vim-007

:!perl -pe ‘s/\b/\n/g’ | sed -n ‘/\w/p’ | sort | uniq -c | leafpad

fizzbuzz-vim-008

次は選択したテキストの右方にコメントを書くフィルタです。

fizzbuzz-vim-009

%は注意が必要です。Vimでは%はファイル名になるので、コマンドとして実行する場合はエスケープします。
:!expand | awk ‘/flag/{printf”\%-42s /* COMMENT */\n”,$0}’

fizzbuzz-vim-010

flagという文字列のみコメントする場合。

fizzbuzz-vim-011

:!expand | awk ‘\!/flag/{print} /flag/{printf”\%-42s /* COMMENT */\n”,$0}’ | unexpand

fizzbuzz-vim-012

天才こどもVimmerが今現れたとしても、彼らが大人になる頃は、入力装置の主流がキーボードから他の装置に変わってるかもしれません。今でこそVimは思考のスピードで編集できると言われていますが、それこそ将来、考えるスピードで入力できる装置が開発されたら、Vimお払い箱、のろい意味での嗜好のスピードエディタに成り果てます。
ただ、私はそんな時代がきてもお迎えが来るその日までVimを使ってると思うんです。ただ打つのが楽しい。それがVimです。

One response to “Vim上でテキストにフィルタをかける

  1. It’s much easier to unadtsrend when you put it that way!

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA