Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  UNIXの教科書 応用編

UNIXの教科書 応用編
〜はじめよう! WindowsとLinuxからのステップアップ〜

第3日目:viエディタの操作(活用編)

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
第3日目:viエディタの操作(活用編)
今月のテーマはviエディタの操作です。基礎編で取り上げた基本的な操作はもう身に付いているでしょうか?応用編では、viエディタを日常的に使う上でぜひ覚えておきたい便利な機能について学んでいきます。1時間目はカーソルの移動方法とコピー&ペーストを、2時間目は置換と削除を取り上げました。どれもテキスト編集の際には欠かせない機能ですから、しっかりマスターしてviエディタを使いこなせるようになりましょう。
UNIXの教科書 応用編〜はじめよう! WindowsとLinuxからのステップアップ〜 3日目
viをより便利に使う
exコマンドに挑戦
2008年10月
大津 真

UNIXの教科書:登場人物紹介 このリンクをクリックすると、新しいウィンドウが開きます

マリー先生
マリー先生:
ターミナルで動作するテキストエディタの代表といえるviエディタについては、UNIXの教科書 基礎編の5日目「viエディタの操作(基本編)」で解説したけど、基本的な操作はできるようになったかな?今回はその応用編として、より実践的な使い方について説明しましょう 。
その前に、前回のfindコマンドについてなにか質問ありますか?
四色君:
findコマンドの検索結果を別のコマンドに渡す場合の書式が覚えにくいのですけど……。
四色君
マリー先生
マリー先生:
「-exec コマンド {} \:」オプションを使う方法ね。たとえば、カレントディレクトリ以下の拡張子が「.html」のファイルを検索して、文字列「HP-UX」含む行を表示するには次のように実行したわね。

$ find . -name "*.html" -exec grep "HP-UX" {} /dev/null \; 【Enter】
./abc.html:<h1>HP-UX</h1>
./Site/index.html:<h2>HP-UX Chapter1</h2>
./Site/samples/info.html:<h1>HP-UX SUPPORT</h1>
./Site/samples/info.html:<h2>HP-UX 11i Version3:Feb</h2>

確かに、これは長くて慣れないと難しいでしょう。別の方法として、findとxargsというコマンドをパイプで組み合わせても同じことができるの。xargsは、標準入力から受け取ったデータを指定したコマンドの引数として展開してくれるコマンドで、次の形式で使うの。

コマンド1 | xargs コマンド2

「コマンド1」の実行結果が、「コマンド2」の引数になるわけね。xargsコマンドで、前の例と同じ処理を行うには次のようにすればいいわ。

$ find . -name "*.html" | xargs grep  "HP-UX" 【Enter】
./abc.html:<h1>HP-UX</h1>
./Site/index.html:<h2>HP-UX  Chapter1</h2>
./Site/samples/info.html:<h1>HP-UX  SUPPORT</h1>
./Site/samples/info.html:<h2>HP-UX 11i  Version3:Feb</h2>

四色君:
あっ、こっちのほうが覚えやすいかも。
四色君
マリー先生
マリー先生:
それに、「-exec コマンド {} \:」オプションの場合にはその都度コマンドが実行されるけど、xargsの場合には引数として一度に展開するので、たいていの場合実行時間が短くてすむというメリットもあるのよ。

今日の時間割 viをより便利に使う exコマンドに挑戦 練習問題

1時間目:viをより便利に使う

viによる基本的な編集方法については基礎編5日目の2時間目で説明しましたので、この時間ではviを日常的に便利に使う上で覚えておきたい編集機能をまとめておきましょう。

カーソルを行内の指定した文字に移動する

行内カーソルの移動は「h」(1文字左)、「l」(1文字右)、「w」(次の単語)などで行えますが、移動したい位置の文字がわかっている場合に「f文字」「F文字」コマンドが便利です。

表1:f文字・F文字によるカーソル移動

コマンド カーソルの動作
f文字 行末に向かって指定した文字の位置に移動
F文字 行頭に向かって指定した文字の位置に移動

たとえばコマンドモードで「fh」とタイプすると、現在位置から行末に向かって文字「h」が検索され最初に見つかった場所に移動します。

hello hp-ux
        ↓ 「fh」コマンドを実行【Enter】
hello hp-ux

「Fe」とタイプすると、逆に、行頭に向かって文字「e」が検索されます。

hello hp-ux
        ↓ 「Fe」コマンドを実行【Enter】
hello hp-ux


タックス君:
同じ文字を続けて検索したい場合には「f<文字>」を繰り返し実行しなければならないのですか?
タックス君
マリー先生
マリー先生:
同じ文字を同じ方向に向かって検索したい場合にはセミコロン「;」をタイプすればOKよ。
あと、逆方向に検索するにはカンマ「,」を使ってね。

hp-ux hp-ux hp-ux hp-ux
            ↓ 「fh」コマンドを実行【Enter】
hp-ux hp-ux hp-ux hp-ux
          ↓ 「fh」コマンドを実行【Enter】
hp-ux hp-ux hp-ux hp-ux
        ↓ 「;」コマンドを実行【Enter】
hp-ux hp-ux hp-ux hp-ux
      ↓ 「,」コマンドを実行【Enter】
hp-ux hp-ux hp-ux hp-ux

1文字を置き換える

それでは、カーソル位置の1文字だけを別の文字にしたいといった場合はどうすればよいでしょうか? 普通に考えれば、「x」コマンドで1文字削除して、「i」コマンドでインサートモードに移行し、目的の文字をタイプしてからescキーでコマンドモードに戻すという手順になるでしょう。実は「r」コマンドを使用することで簡単にカーソル位置の1文字を置き換えられます。escキーでコマンドモードに戻す必要もありません。次に「hp-ux」の「h」を「H」に置き換える例を示します。

hp-ux
    ↓ 「r」コマンドを実行【Enter】
  ↓ 「H」をタイプ【Enter】
Hp-ux

タックス君:
あっ、これは便利ですね。
タックス君
四色君:
行全体を置き換えることもできますか?。
四色君
マリー先生
マリー先生:
「r」コマンドの代わりに「S」コマンドを使えばできるわよ。「S」コマンドを実行すると現在カーソルのある行全体がクリアされるので、文字列をタイプしてね。

文字列の検索

文字列を検索するには、まず「/」をタイプします。続けて検索したい文字列を入力しEnterキーを押すと、ファイルの後方に向かって検索が行われ、最初に見つかった文字列にカーソルが移動します。同じ文字列を同じ方向に向かって検索するには「n」コマンドを実行します。

unix
hp
unix
hp
unix
    ↓ 「/hp」コマンドを実行【Enter】
unix
hp
unix
hp
unix
  ↓ 「n」コマンドを実行【Enter】
unix
hp
unix
hp
unix

なお、逆方向に向かって検索するには「N」コマンドを実行します。


タックス君:
ファイルの先頭に向かって検索することはできますか?
タックス君
マリー先生
マリー先生:
「/」の代わりに「?」を使えばできるわよ。その場合、「n」コマンドと「N」コマンドの向きが逆になるから注意してね。あと、検索文字列には正規表現も使えるわよ。たとえば、文頭に向かって行末の「hp-ux」を検索するには「?hp-ux$」と実行してね。

範囲のコピー&ペースト

GUIのエディタの場合にはマウスのドラッグによるコピー&ペーストで文字列のコピーができましたが、伝統的なviではマウスが使えません。viでコピー&ペーストを行うには、いったん範囲をバッファと呼ばれる一時的な領域に格納し、その内容を目的の位置にペーストします。

まず、行のコピーから説明しましょう。現在行をバッファに格納するには「yy」コマンド(もしくは「Y」コマンド)を使用します。また、バッファの内容を現在行の直前に挿入するには「P」コマンドを使います。したがって、現在行を別の行にコピーする手順は次のようになります。
  1. コピーしたい行に移動し、「yy」コマンドでバッファに移動する
  2. コピー先の行に移動し、「P」コマンドでペーストする
次に、3行目を1行目の前にコピーする例を示します。

1 HP-UX
2 HP-UX
3 HP-UX
4 HP-UX
    ↓ 「yy」コマンドを実行【Enter】
   ↓ 1行目にカーソルを移動
1 HP-UX
2 HP-UX
3 HP-UX
4 HP-UX
  ↓ 「P」コマンドを実行【Enter】
3 HP-UX
1 HP-UX
2 HP-UX
3 HP-UX
4 HP-UX

なお、現在行の次の行にペーストしたい場合には「P」ではなく「p」コマンドを使います。


タックス君:
複数行をコピーすることはできますか?
タックス君
マリー先生
マリー先生:
もちろんできるわよ。その場合は「yy」の前に行番号を指定するの。たとえば現在行から4行をバッファに格納するには「4yy」となるわけね。

なお、「y」コマンドを次の形式で使用すると、現在位置からカーソルの異動先までの範囲をバッファに格納できます。

y<カーソル移動コマンド>

たとえば、カーソル位置から行末までをバッファに格納するには「y$」を実行します。

範囲の移動

コピーではなく、指定した範囲を移動するにはどうすればよいでしょうか? 実は「dd」コマンドや「d<カーソル移動>」コマンドを実行すると、削除した範囲がバッファに格納されます。したがって、目的の位置で「p」コマンドもしくは「P」コマンドで目的の位置にペーストすれば範囲を移動できます。
次に、2行目と3行目をファイルの先頭に移動する例を示します。

1 HP-UX
2 HP-UX
3 HP-UX
4 HP-UX
    ↓ 「2dd」コマンドを実行【Enter】
1 HP-UX
4 HP-UX
   ↓ 1行目にカーソルを移動
1 HP-UX
4 HP-UX
  ↓ 「P」コマンドを実行【Enter】
2 HP-UX
3 HP-UX
1 HP-UX
4 HP-UX

休憩時間:Windowsでもvi

viの操作に慣れてくると、Windowsのエディタとしても使いたいと思う方も少なくないでしょう。
伝統的なviを拡張したエディタをviクローンなどと呼びます。viクローンの代表といえるのがvim このリンクをクリックすると、HP社外へリンクします。です。vimは現在Windows版も用意されています。Windows版vimの日本語対応を強化したものが以下のサイトからダウンロード可能です。

http://www.kaoriya.net/ このリンクをクリックすると、HP社外へリンクします。

Windows版vimの起動画面
図1:Windows版vimの起動画面

連載記事一覧 1  |  2 次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項