その3TwitterFacebookGoogle+はてブPocket前回にひき続いてvimのtipsを紹介していきましょう。今回はコマンドラインモードについてまとめたいと思います。:(コロン)をタイプすることでコマンドラインモードという特殊なモードに遷移することができあらかじめ用意された組み込みの動作を実行することができます。コマンドラインモードの幾つかはノーマルモードで同等のことが実行でき、状況に応じて両者を使い分けることでより快適な編集ができることになると思います。コマンドの構成を理解する例えば三行目を削除するといった動作を考えてみましょう。これは:3dというコマンドで実現できます。このコマンドを紐解いていきます。コマンドラインモードへ映るには:をタイプします。その後にある3はレンジを表します。今は単行を示していますが、複数行やファイル全体をレンジ対象とすることもできます。最後にdに関してですが、これは指定したレンジに対する動作を表し、以前説明したオペレータと同様のものになります。レンジに対する動作を表す基本的なレンジ指定方法を理解する先程は単行のレンジ指定を例として取り上げましたが、レンジ指定にはいろいろな指定ができ、これが非常に汎用性が高く便利なものなので、是非理解していきましょう。下記に主要なレンジ指定を示したいと思います。指定の行を範囲とする。.を用いて現在カーソルのある行を表せる。$を用いてファイルの末尾を表せる。ファイル置換コマンド。%はバッファ全体をレンジとすることを意味し、sは置換オペレータの省略形を意味する:%s/before/after/gパターンによるレンジ指定方法を理解する直接的な行指定だけでなくコマンドにはパターンを用いたレンジ指定も可能です。指定の行を範囲とする。例では1行目から5行目までをレンジとするはじめは少し見慣れないかもしれないですが、実態としてはスラッシュ区切りで開始パターンと終了パターンを指定しているだけで、そこまで複雑なものではありません。</body></html>結果は下記になります。bodyタグ含む内部が削除されていることがわかりますね。<html></html>またパターンに関して、パターンが存在する行からのオフセットを指定することもできます。例として、htmlタグの内部のみを削除するような場合下記のようなコマンドとなります:/<html>/+1,/<\/html>/-1d同様に先ほどのテキストに対してコマンドを実行すると結果は下記のようになり、bodyタグを除いて内部が削除されていることがわかりますね。</body></html>コピー・移動コマンドを理解する先に取り扱ったコマンドと同じような形で指定行のコピーや移動を行うことができます。その構文は下記のようになります。これも見て行きましょう。:{source}{command}{desctination}それぞれのコマンドは下記のようになっています。任意の行の移動を行う例えば下記のようなバッファに対して3行目の内容を4行目に移動したい場合を考えましょう。</body></html>その際には下記のようなコマンドで実現することができます。:3t4単行での例となりましたが、複数行でのレンジ指定ももちろん使用可能ですので非常に汎用性の高いコマンドとなります。normalコマンドを理解するこちらも非常に汎用性が高いもので、指定のレンジに対してノーマルモードで行いたいオペレータを適用することができます。こちらはノーマルモードやビジュアルモードと併用したりしても同様のことが実現できます。コマンドモードからの実行のほうが効率が良いこともありますので是非覚えておきましょう。i//一つ一つみていきましょう。%レンジを指定しているので対象がバッファ全体となります。その後にnomarlとタイプすることでnormalコマンドを実行できます。半角スペースをひとつ開けて、続いてタイプした内容が実際のノーマルコマンドの内容となります。ここではiを入力して挿入モードに遷移し//をタイプしているため、全行のコメントアウトということが実装できるわけです。お察しの良い方は気づいているかもしれませんが、normalモードを実行する際にはカーソルの位置は暗黙的に行の先頭に初期化されます。コマンドラインウインドウを理解するvimでは実行したコマンド履歴を保存しており、それらを参照したり編集したりすることができます。コマンドラインウインドウを開くにはq:とタイプします。(すこし:qと紛らわしいですので注意ですね。)コマンドを実行すると過去の実行履歴がサブウインドウによって開かれます。コマンドラインウインドウは通常のvimウインドウと同じように編集することができ、編集を保存し終了するときなども同様に:wqで行うことができます。UpキーやDownキーにより、過去のコマンドを選択することができ、エンターキーをタイプすると現在のウインドウに対して過去実行したコマンドを再度実行することが可能です。シェルとのやりとりを理解するまたvimはシェルとも非常に親和性が高く、vimを起動中にシェルを呼び出したり、その標準出力や標準入力に関してやりとりすることが可能です。vimの中からshellを実行するには下記のようなコマンドになります:!{任意のコマンド}例えばlsコマンドを叩く場合は下記のようになります:!lsコマンドを実行すると一度vimではなくシェルウインドウが開き、結果が表示されます。その状態からエンターキーをタイプすると再びvimの画面へと戻ってくるような流れになります。ワンライナーでの実行ではなくシェルとインタラクティブに対話したいときは:shellと実行することでシェルが起動します。これは通常のシェルと同様で、再びvimに戻る場合はexitを用いてシェルを終了する必要があります。vimの編集している状態を残しつつ一時的にシェルを起動したい時など非常に有用だと思います。バッファの内容をシェルとやりとりすることができます。vimからシェルを呼び出しその実行結果(標準出力)を現在のバッファに挿入する場合はreadコマンドを用います。!ls逆にバッファの内容をシェルの標準入力に挿入する場合はwriteコマンドを用います。phpスクリプトを記述していて、それをvimの中から呼び出す場合なんかは下記のようになります。!php最後に範囲指定で!コマンドを行うとバッファの内容をシェルに渡したあと、結果で選択範囲のバッファを上書きすることもできます。対象をgmail.comのユーザのみに絞り込みたいとします。id,name,email1,Bob,ex1@gmail.com2,Jobeth,ex2@yahoo.com3,Steven,ex3@gmail.com4,Smith,ex4@yahoo.comこの際に2行目から最終行までをレンジ選択して、grepコマンドを用いてフィルタリング処理を行ってみましょう。@gmail.com結果として下記のようにフィルタリング処理が実行できています。id,name,email1,Bob,ex1@gmail.com3,Steven,ex3@gmail.comいかがでしたでしょうか。非常に汎用性の高いコマンドが多く、便利なものばかりですね。するとvimは内部でそれぞれのファイルに対応するバッファを展開します。この様子は下記のexコマンドを実行することで、展開しているバッファの様子を確認することができます。(exコマンドには前回説明しましたので、わからない方は参照してみてください。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。その4RECOMMENDこちらの記事も人気です。