Ubuntu Weekly Recipe

第35回 テキストエディタの活用(4):vi/vim その2

この記事を読むのに必要な時間:およそ 3 分

今回も前回に引き続き,vi/vimの使いこなしについてのレシピをお届けします。特に,複雑なテキスト編集が必要な場合や,ログの整形,コーディングなどには大きな効果を発揮するでしょう。普段他のテキストエディタを使っている人にこそお勧めです。

同じ操作の繰り返し

vi/vimの基本的な操作の中には,「直前の操作を繰り返す」というものがあります([.]を使います)。この機能を使いこなすことで,複雑な操作を楽に行うことができます。

たとえば,各行で行頭の8文字を削除したい,という操作を行いたいとしましょう。全ての行に処理するのであればsedやawkで処理した方が楽ですが,今回は「人間の目にはすぐわかるが,正規表現で表現しにくい,特定行の行頭の8文字だけを削除したい」という操作だと思ってください。

こうした削除操作をgeditやKateなどで行うと,「問題の行へ移動する→行頭へ移動する→[Del]キーを8回押す」という操作を延々と繰り返す必要があります注1)。これでは面倒なので,同じことをvi/vimで行うと良いでしょう。

次のように操作します。

まず,問題の行へ移動します。これは通常通りに移動すれば良いでしょう。なお,vimでは行の移動は[j][k]だけでなくカーソルキーを利用することもできますし,Emacs風の[Ctrl]+[n]もしくは[Ctrl]+[p]すら利用できます。もちろん特定の行に移動したければ行番号+[G](たとえば20行目へ移動したければ[2][0][G])でも構いません。

行頭へ移動するために[0]を押下します。

先頭の8文字を削除するために[8][x]と操作しましょう。ここがポイントです。vi/vimでは直前の編集操作を[.]で代用できますから,この部分の操作([8][x])は以降は[.]で代用できます。以降は行の移動と[.]の繰り返しで効率良く操作が可能なはずです。

この操作は次のような操作にも有効です。

OSのISOイメージなど,複数のURLからファイルをダウンロードしたい場合,とりあえずURLの羅列されたファイルが存在するとします。ここでは例としてKnoppix日本語版のISOイメージを例に取りましょう。URLを列挙したファイルは次のようになります。

ftp://www.ring.gr.jp/pub/linux/knoppix/iso/knoppix_v5.3.1DVD_20080326-20080408-AC.iso
ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso
ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix511-TC-Geeks-101.iso

これらのISOイメージをダウンロードするにはどうするのが良いでしょう? Firefoxでひとつひとつダウンロードしても良いですが,単純に考えるのであれば,各ファイルをwgetする,というのが容易な手段です。

これをvimで編集し,簡易スクリプトにしてみましょう。

vimを開いて[i]を押してエディットモードにし,上記のURLを貼り付けます([編集][貼り付け])。貼り付けたら[ESC]でコマンドモードに戻ります図1)。

図1 gvimにURLを貼り付ける

図1 gvimにURLを貼り付ける

シェルスクリプトにする場合,ファイルの先頭にshebangが必要ですので,[1Gi]として,ファイルの先頭に移動して編集モードにします。ここで「#!/bin/bash」と入力して[Enter]で改行します。

URLの列挙部分の先頭に「wget 」と入れることができれば良いのですが,普通のエディタでは延々と移動→「wget 」と入力→移動→「wget 」と入力……と,同じような操作を繰り返さなければいけません。

viの場合も移動をしないといけないのは同じですが(今回の例であれば[3g0i]と操作して「wget 」と入力すれば良いでしょう),次の行へ移動し([j0]),さらに前述の[.]を使うことで,『「wget 」と入力』の部分の手間が大きく減らすことができるでしょう。事実上,操作は[j0.]を繰り返すことになります図2)。

図2 できあがったスクリプト

図2 できあがったスクリプト

#!/bin/bash

wget ftp://www.ring.gr.jp/pub/linux/knoppix/iso/knoppix_v5.3.1DVD_20080326-20080408-AC.iso
wget ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso
wget ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix511-TC-Geeks-101.iso

あとはファイルを保存して終了し([:w wgetsamp.sh][:q]),できあがったファイルに実行権限を与えれば完成です注2)。

$ chmod +x wgetsamp.sh

今回の例では数行なので通常のエディタであっても大した手間ではありませんが,行数が増えれば増えるほど,vi/vimの操作の利点が表に出てくるはずです。

#!/bin/bash

wget ftp://www.ring.gr.jp/pub/linux/knoppix/iso/knoppix_v5.3.1DVD_20080326-20080408-AC.iso
wget ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix_v5.1.1CD_20070104-20070122+IPAFont_AC20070123.iso
wget ftp://unit.aist.go.jp/itri/knoppix/iso/knoppix511-TC-Geeks-101.iso
注1)
ここでは話を単純にするため敢えて触れていませんが,「直前の操作を繰り返す」といった操作は他のエディタにも搭載されていますので,[Del]x8の代わりであれば他のエディタでも同様のことが行えます。が,viでは「行頭から8単語を削除(8dw)」などといったこともできますし,「文字を追加」などといった操作も代行できますので,覚えておくと応用の幅が大きく広がるはずです。また,移動関連のキー操作はviの方が格段に少なくなります。
注2)
もっとも,単にURLが羅列されているファイルがあるのであれば,簡単なシェルスクリプトを組んでしまった方が処理が早く済みます。この場合であればfor i in `cat URLlist.txt`; do wget $i;doneなどとすれば良いでしょう。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

  • typo

    > なお読み込まれているプラグインの一覧は,「:pluginnames」とすることで得ることができます。
    :scriptnamesです。さらに言えばプラグインだけの一覧を得るコマンドはありません。

    Commented : #1  kana (2008/09/11, 12:35)

コメントの記入