MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

コアテクノロジー部

ミラクル・リナックスのOS開発やサポートを担う、技術部の精鋭陣が交代で担当します。

ミラクル関連リンク

採用情報

サイト検索

2008年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

« 差分解析その1 | メイン | 子育てグッズ »

vim: ed コマンドを使う

こんにちは。 転職して 2 ヶ月になる kyagi です。梅雨も明けていよいよ本格的な夏到来ですね。弊社の技術部は私服で勤務オーケーなので、このごろはgraniphでまとめ買いしたTシャツを着て通勤しています。

vi の使用法が好評を博しているということで、私も一席。ネタは「vi で ed コマンドを使う」です。

さっそくはじめましょう。

shell, perl スクリプトを書いている時に、ある範囲の行をコメントアウトしたくなる時がありませんか?そんなときいちいち、移動と削除を繰り返し入力するのは面倒くさいですよね。この操作を楽チンに実現する方法をお伝えします。

ed の基本的な構文は「ある範囲の行(パターン)」を「なになにする(アクション)」というものです。まず set nu で行番号を表示します。

:set nu

コメントアウトする部分を特定した後、置換を実行します。例えば 20 行目から 30 行目をコメントアウトしたいなら以下を実行します。

:20,30s/^/#/

元の状態に戻す(コメントを付けていない状態)には以下を実行します。

:20,30s/^#//

この「ある範囲の行(パターン)」を「なになにする(アクション)」という考え方は ed だけでなく sed, awk といった言語を理解するキモであり、 perl でのフィルタ作成にも通じるものです 。「ある範囲の行」というのを、ここでは 20-30 行目という具体的な行数をあげていますが、正規表現 を使用してパターンとして指定することも可能です。

前回の「ですくとっぷLinux」で弊社岡野が /etc/ssh/sshd_config に対して行った編集をed を使ってスクリプト化することも可能です。

このような ed スクリプトがもっとも真価を発揮するのは大量のファイルに変更を加えたい場合です。

たとえば CVS の最初のチェックインに際してすべての C ソースの末尾に $Id$ キーワードなどを挿入するような ed スクリプト(add_cvs_keyword.sh) を作成し、find などと組み合わせると何百とあるソースすべての一括編集が可能となります。

find . -name "*.[ch]" -exec add_cvs_keyword.sh {} \;

他にも html ソース内の用語の一括置換(たとえばメールアドレスや社名の変更)など、いろいろな場面で活用できると思います。ただし、webmaster のみなさん、試す前にバックアップとテストは忘れないでくださいね。:-)

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6447775

このページへのトラックバック一覧 vim: ed コマンドを使う:

» vi - set nu トラックバック iTakahiro's D
vim ed コマンドを使う: http://blog.miraclelinux.com/ctd/2006/07/post_c0e8.html まず set nu で行番号を表示します。 そうか、こういう方法があったんだ。 今まで「.,+5」のように現在行から何行あるかわざわざ数えてから指定していた。 恥ずかしいーー 最終行を指定する「$」も、覚えたの最近だし。 で、行番号表示を OFF にするには「set nonu�... [続きを読む]

コメント

行番号を表示したり見たり数えたりするのは面倒なので、vim であれば「v」で領域を選択してから「:s/^/#/」と入力すればよいのではないかなと (表示上は「:'s/^/#/」になる)。

ちなみに、矩形の選択は「Ctrl+v」です。

こっちのほうが視覚的でよりわかりやすいですね。:-)

ちなみに私の環境では下のように表示されました。

:'<,'> s/^/#/

これを見るに、vi のマーク機能を自動的に使っているようです。

これと同様の操作を手動で行う場合、領域を開始する行と終了する行にそれぞれマークをつければいいので、

20 行目で
ma

30 行目で
mb

とした後に、
:'a,'bs/^/#/

とすれば同じ動作になります。

ed スクリプト内では不可能ですが、vi(ビジュアル)ならではの領域指定方法ですね。

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.