序文 世間一般では、 Vim の学習曲線は非常に急激なものだといわれている。ほとんどの Vim ユーザーがこの意見には賛同しないと私は考えている。最初の壁は高い、確かに。 しかし、 vimtutor を一通り実行し、ⅵ mrc に何を書けばいいのか、そこのところの基 本が身につけば、よちょち歩きではあっても、実際に何かをできるだけのところまで は到達している。 では、次にどうすればいいのだろう。インターネットに聞いてみたところ、その答 えは「 TIP 」一一一つまり、何か具体的な問題を解決するためのレシピ だ。この解決 策は最適解じゃないのでは ? と感じたときには何かの TIP を検索したりするかもし れない。あるいは、広く知られている TIP を自分から進んで読み進めたりすることも あるかもしれない。この方法はうまくいく一一一そうやって私は勉強したのだから しかし、その歩みは遅々としたものになる。カーソル位置にある単語を検索する第コマ ンドを勉強するのは役に立っことだが、 Vim マスターのように考える役には立たない だろう。 とすると、「実践 VimJ が TIP 本の体裁になっていることに気づいたときに で大丈夫なのか」と思ったことも理解できるだろう。数百個の TIP で、数千の問題を 解決できるようなところまで到達できるのだろうか ? 数ベージを読んだところで、 私自身の TIP の定義が狭量なものだったことがわかった。私は TIP を「問題 / 解法」 のパターンになっていると思っていた。しかし、これとは対照的に「実践 Vim 」の TIP は Vim の上級ユーザーのように考えるための知識を教えてくれる。ある意味、レシピ というよりは、むしろ比喩のような感じが強い。最初のいくっかの TIP は、一コマンド をさまざまな状況で適用するためのレッスンだ。これは、すべての Vim 上級ユーザー にとっては使いこなしが必須のものだ。それなのに、当時は一コマンドについてのガイ ダンスがなかったので、私はこれをちゃんと理解するまでに数年を費やした。 そういうわけで、私は「実践 Vim 』の出版に胸を躍らせている。 Vim 初心者が次の ステップについて尋ねてきても、いまなら彼らに何ていえばいいのかハッキリしてい る。なにせ、私でさえ「実践 Vim 』から教えられることがあったくらいだ。 Tim Pope Vim core contributor April 2012 12
第 8 章 モーションによるファイル内の移動 151 法を身につけよう。そうすれば、 Vim をよりテキパキと使えるようになる。 いる。自分の手をホームボジションから離さないままカーソルを移動する方 Vim は、タッチタイプをする人にとって最高に使いやすくなるようにできて T 旧 46 : 自分の指はホームボジションから外さない とを目標としよう。 ◎を参照してほしい。毎週、いくつかのモーションを自分のレバートリーに加えるこ 理なので、すべてのリファレンスについては Vim のドキュメントで : h motion. txtO Vim にはたくさんのモーションがある。本章でそれらのすべてを取り上げるのは無 クトだ。これについては TIP51 ( 166 ページ ) 、 TIP52 ( 171 ページ ) で取り上げよう。 紹介していく。オペレータ待機モードでぜひとも見ておきたいのがテキストオプジェ た。本章では、全体を通して、モーションとオペレータコマンドを組み合わせる例を モードで、何かをするためにも使える。これについては、 TIP12 ( 51 ページ ) で説明し モーションはドキュメント内を移動するためだけのものではない。オペレータ待機 では検索コマンドで移動する方法を見ることにしよう。 ( 159 ページ ) では現在行で狙った文字にピタッと移動する方法を、 TIP50 ( 164 ページ ) する方法もある。 TIP48 ( 156 ページ ) では単語単位の移動を一度で行う方法を、 TIP49 に動かせる。次の TIP46 ではこれを見る。基本はこれだけど、もっとサクサクと移動 うことだ。 Vim では、ホームボジションから手を離さなくても、カーソルを上下左右 ドキュメント内を移動する最もシンプルな方法といったらたぶんカーソルキーを使 のに使えるモーションに焦点を当てていこう。 ファ間を移動するためのコマンドも多数ある。本章では、ドキュメント内を移動する Vim には、ドキュメント内を移動するためのコマンドがたくさんある。さらに、バッ
RTFM (Read the Forgotten Manual) く 本書における Vim スクリプトの扱い Vim スクリプトを使うと、 Vim に新たな機能を追加したり、既存の機能を変更した りできる。 Vim スクリプトはそれ自体が完全なスクリプト言語であり、それ自体で 1 冊の本とするだけの価値があるものだ。本書はそのための本ではないのだが。 とはいえ、これをまったく取り上げないというわけでもない。 Vim スクリプトはい つだってすぐそばに姿を隠していて、私達の命令を実行できるように待機している。 TIP96 ( 299 ページ ) の 2 つ。これらの TIP では、筆者お勧めのプラグインで、筆者的 パーテイプラグインのことはあまり考えていない。例外は、 TIP86 ( 275 ページ ) と 本書は、 Vim のコア機能を使いこなす方法を示すものだ。言い換えると、サード は、毎日の仕事で Vim スクリプトを活用するサンプルをいくつか紹介する。 TIP16 ( 60 ページ ) 、 TIP70 ( 230 ページ ) 、 TIP94 ( 294 ページ ) 、 TIP95 ( 296 ペ ージ ) で 23 ストールし、その上で動作する Vim 7.3.547 を使って、実行を確認しています。 * 4. 訳注 : 翻訳に当たっては、 VMwa 「 e ()O 「 kstation 9/Fusion 5 ) 上に Ubuntu Desktop 13.04 をイン しれない。 : versi 。 n コマンドでその機能が使えるかどうかをチェックしてみよう。 本書で説明している機能がないときには、最小限の Vim ビルドを使っているのかも 覧できる。山 + feature-list ⑩◎ normal 、 big 、 huge という名前の機能セットがある ) 。機能リストは次のコマンドで一 すると、本当に基本的な機能を除いて、すべてが無効化される ( これ以外にも small 、 構成時に「 --with-features=tiny 」オプションを指定できる。このオプションを指定 Vim の機能のなかには、コンパイル時に無効化できるものもある。たとえば、ビルド で取り上げる機能の多くは 6. x でも利用できる、 4 。 ている。しかしながら、ほとんどのサンプルは 7. x リリースでも動くだろうし、本書 本書のすべてのサンプルは、執筆時点での Vim の最新バージョン ( 7.3 ) でテストし Vim のノヾーション にうれしいことはない。 れを使って何を実現できるかがわかるはすだ。読者が興味を持ってくれたら、こんな Qargs. vim の実装を説明なしでご覧に入れよう。 Vim スクリプトがどんな感じか、 すれも、 Vim の機能がどれほど簡単に拡張可能かを示すものだ。 visualstar. vim と コードを書く必要はない ( 10 行に満たない Vim スクリプト ) 。これらのサンプルはい にはなくてはならない機能を追加する。どちらの TIP でも、プラグインではほとんど
第 14 章置換 置換コマンドはさまざまな要素で構成されている。 [range] に関する規則は他のす べての Ex コマンドと同じだ。これについては TIP28 ( 85 ページ ) で詳しく解説をし た。 { patter Ⅱ } も同様であり、これについては第 12 章「パターンとリテラルのマッチ」 ( 241 ページ ) で解説をした。 フラグを使って置換コマンドの動作をチューンする 置換コマンドの動作はフラグを使ってチューンできる。フラグとは何かを理解す るには、これを実際に見てみるのが一番だ。というわけで、他の TIP で使われるフ ラグをいくつかここで定義しておこう ( すべてのフラグについては次を参照のこと → :h :s-flags ①① ) 。 g フラグにより、置換コマンドがグローバル (globally) に適用されるようになり、 1 行のなかにある最初のマッチだけでなくすべてのマッチが変更されるようになる。こ れについては TIP88 ( 281 ページ ) で見てみよう。 c フラグを指定すると、個々の変更について、それを実行するか却下するかを確認 (confirm) できるようになる。これについては、 TIP89 ( 283 ページ ) で取り上げる。 n フラグは、通常の置換動作を抑制し、その置換コマンドを実行したときに影響の あるマッチの数 (number) を報告するようになる。この使用例は、 TIP82 ( 265 ペー ジ ) で示した。 現在のファイルにマッチするものがないパターンを指定して置換コマンドを実行す ると、 Vim は「 E486 : pattern not found 」 ( E486 : バターンはみつかりませんでし た ) というエラーを表示する。 TIP96 ( 299 ページ ) で見るように、 e フラグを指定す ると、このエラーを表示しないようにできる。 & フラグは単に、直前の置換コマンドと同じフラグを使うように Vim に伝えるもの だ。 TIP92 ( 289 ページ ) では、どんなときに、これを便利に使えるかを示そう。 置換文字列で使用する特殊文字 第 12 章「パターンとリテラルのマッチ」 ( 241 ページ ) では、検索パターンで使うと きに特殊な意味を持っ文字をいくつか紹介した。置換フィールドでも特殊な意味を持 つ文字がある。特殊な意味を持っすべての文字については : h sub-replace-special ①①を見てほしいが、以下の表に代表的なものをまとめておこう。 280
Read Me 「実践 Vim 』は、自分の技量を向上させたいプログラマに向けたものだ。聞いたこと があるだろうが、熟練者の手にかかれば、 Vim は思考のスピードでテキストを切り刻 んでいく。この目標に向かう次のステップが本書を読み込むことだ。 「実践 Vim 』は Vim マスターへの近道だ。手取り足取り教えたりはしないが、前提と なる知識は Vim チューター * 1 (Vim と一緒に配布されているインタラクテイプな Vim 入門 ) をひとしきり実行すればわかるだろう。「実践 VimJ は、 Vim の中核となるコ ンセプトとイディオム的な使い方に着目することで、この前提となる知識からさらな る高みを目指すものだ。 Vim は非常に柔軟に構成を行える。ただし、カスタマイズは個人的な話だ。だから、 vim て c ファイルに何を記述すべきか、何を記述すべきではないかについて、何かをお勧 リモートサーバーに SSH 接続 めしたりはしない。そうではなく、「実践 Vim 』では して使っていようが、ローカルマシンでいくっかの機能拡張プラグインをインストー ルした状態で GVim を起動していようが、必す扱うことになる一一工デイタのコア機 能に注力する。 Vim のコア機能をマスターしよう。そうすれば、どんな環境にあって も強力なテキスト編集ツールを使えるようになる。 本書の構成 「実践 Vim 』はレシピ本だ。最初から最後まで順に読んでいくような作りにはなって いない ( これは本当だ。次にある「 RTFM 」では、まず、ここは飛ばして、実際にやっ てみようとお勧めするくらいだ ) 。各章はテーマごとに TIP が集められていて、各 TIP は特定の機能を実地に説明している。一話完結的な TIP もあるし、本書の別の TIP で 取り上げた話題を再度取り上げるものもある。そうした TIP では、相互に参照を掲載 することで、簡単に移動できるようにしている。 本書では、やさしい話題から高度な話題へと順に話を進めてはいないが、各章のな かではそうなるようにしている。初心者なら、本書に初めて目を通すときには、各章 の先頭のほうにある TIP を読んでもよい。上級者なら、各章の後半にある TIP を読ん だり、必要に応じてつまみ読みしてくれてもかまわない。 * 1 . http : //vimdoc. sourceforge. net/htm1doc/usr-01. html#vimtutor 13
第 10 章 コピー & ペースト 191 名レジスタを使って何ができるかを見てみよう。 個あることと、使用するレジスタを指定可能なことについて話をする。が、まずは無 わりに出てくるのがレジスタだ。 TIP60 ( 196 ページ ) では、 Vim にはレジスタが複数 ポードに保持する話のことだ。 Vim の用語的には、クリップポードは出てこない。代 カット / コピー / ペーストについての話といったら、ふつうはテキストをクリップ の動作についてより深い理解が必要となる処理を見てみよう。 と簡単に解決できる状況をいくつか学んでいこう。最後に、 Vim のレジスタ くある作業が簡単になるように設計されている。 Vim の無名レジスタを使う Vim の削除コマンド、ヤンクコマンド、ブットコマンドはデフォルトで、よ 引 P59 : 無名レジスタを使った削除 / ャンク / ブット 作用を生むことなしに使う方法について説明する。 最後に、 TIP63 ( 207 ページ ) では、システムレベルの貼り付けコマンドを、変な副 TIP61 ( 202 ページ ) でお話ししよう。 ドで使った場合、ブットコマンドにはビックリするような面もある。これについては ジ ) で見るように、行単位 / 文字単位のテキストの扱いに長けている。ビジュアルモー TIP60 ( 196 ページ ) で詳しく解説しよう。 Vim のブットコマンドは、 TIP62 ( 204 ペー を保持可能な 20 ~ 30 個ほどのレジスタを提供している。 Vim のレジスタについては システムレベルで唯一存在するクリップポードを扱うのではなく、 Vim はテキスト の各コマンドの一般的な使い方を説明しよう。 見るようにまず用語が異なっている。次の TIP59 では、 Vim の削除 / ャンク / ブット しれないそれらの機能とは異なっている。「 Vim の用語と世間の用語」 ( 195 ページ ) で Vim のカット / コピー / ペースト ( 貼り付け ) 機能は、読者が使い慣れているかも
第 7 章 ファイルのオープンとディスクへの保存 こうした場合にどうすればよいかを TIP44 ( 144 ページ ) 、 TIP45 ( 145 ページ ) で取り や、ファイルを書き込むパーミッションがないときには、ややこしくなることがある。 は普通はとても単純なのだが、存在していないディレクトリに保存しようとしたとき : write コマンドは、バッフアの内容をディスクに保存するのに使える。その使い方 ようになる。 TIP43 ( 139 ページ ) では、この使い方を説明する。 Vim に付属の netrw プラグインを使うと、ディレクトリツリーの内容を探索できる イル名を入力するだけで済むようになる。 が使えるようになる。これで、完全修飾ファイルバスを指定する必要がなくなり、ファ 「 path 」オプションの設定方法を説明しよう。これを設定することで、 :find コマンド スを指定する必要があるが、これがめんどうなときもある。 TIP42 ( 137 ページ ) では、 ているファイルを扱うときには、オープンする全ファイルについて完全なファイルバ プロジェクトのルートディレクトリ以下にある複数のサプディレクトリに格納され できる。 マンドを見てみる。これはファイルバスで指定される任意のファイルを開くのに使用 ファイルをオープンする方法が Vim にはいくつかある。次の TIP41 では、 : edit コ 上げよう。 イルをオープンする T 旧 41 : 「 :edit 」でファイルバスを指定してファ 133 例として、 files/mvc ディレクトリを使おうにのディレクトリはインターネット ティブなバッフアに相対的なバスを指定する方法を説明しよう。 対ファイルバスか相対ファイルバスのどちらかを指定する。ここでは、アク :edit コマンドを使うと、 Vim からファイルをオープンできる。これには絶
目次 謝辞・ 序文・ Read Me ・ RTFM (Read the Fo 「 gotten Manual) 第 1 章 Vim のやり方 TIP 1 : ドットコマンドとは・ TlP2 : DRY(Don't Repeat You 「 self) TIP3 : 一歩下がって、三歩進む 羽 P4 : 実行して、繰り返して、元に戻す・ TIP5 : 手作業での検索と置換・ TlP6 : ドットの公式・ 第 1 部モード 第 2 章ノーマルモード TlP7 : 埃を払って一息つこう・ TlP8 : アンドウはひとまとめに TIP9 : 変更を繰り返し可能なものにする・ TIPIO : 回数指定を使って簡単な計算を行う TIPI 1 : 繰り返しで済むなら、回数を指定しない TlP12 : 統合して統治せよ 第 3 章挿入モード TlP13 : 挿入モードで簡単修正・ 羽 P14 : ノーマルモードへの復帰 TlP15 : 挿入モードから抜けないでレジスタから貼り付け・ TlP16 : 簡単な計算をその場で実行・ 羽 P17 : 文字コードを使って特殊文字を入力 TIP 1 8 : ダイグラフによって特殊文字を挿入・ 羽 P19 : 置換モードで既存のテキストを上書き . 第 4 章ビジュアルモード TlP20 : ピジュアルモードとは・ 羽 P21 : ビジュアルな選択範囲の定義 0 2 3 5 5 5 8 1 3 4 7 2 2 2 3 3 っ CO 1 ィーー 2 4 7 9 1 5 5 6 8 0 1 2 3 5 5 7 6 6 3 4 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 5
目次 TIP26 . 矩形状ではないピジュアルな選択範囲にテキストを追加 TIP25 . テキスト列の変更・ TIP24 : プロック指向のビジュアルモードで表形式のデータを編集 TlP23 : 可能ならはピジュアルコマンドではなくオペレータを優先しよう TlP22 : 行指向のビジュアルモードコマンドを繰り返す 第 5 章コマンドラインモード 羽 P33 . カーソル位置にある単語をコマンドプロンプトに挿入・ TIP32 : Ex コマンドでタブ補完・ 直前の Ex コマンドを繰り返す・ TlP30 : 選択範囲に対してノーマルモードのコマンドを実行する・ 羽 P29 . 「 : t 」 / 「 : m 」コマンドで行をコピー / 移動・ 連続する行に対してコマンドを実行する TlP27 . Vim のコマンドラインモード・ 羽 P34 羽 P31 羽 P28 TIP35 . シェルでコマンドを実行 履歴からコマンドを呼び戻す・ 第 6 章複数ファイルの管理 第 2 部ファイル TlP40 . タブページを使ってウインドウのレイアウトを管理 TIP39 . ワークスペースを分割ウインドウにする TlP38 . 隠しファイルの管理・ 羽 P37 . 引数リストを使ってパッフアをコレクションにまとめる TlP36 : パッファリストを使ってオープン中のファイルを管理する 第 7 章ファイルのオープンとディスクへの保存 TlP45 : スーパーユーサーとしてファイルを保存・ 存在していないディレクトリにファイルを保存 羽 P43 . net 「 w でファイルシステムを探索 羽 P42 : 「 :find 」を使い名前を指定してファイルをオープンする TlP41 : 「 :edit 」でファイルバスを指定してファイルをオープンする・ TlP44 第 8 章モーションによるファイル内の移動 第 3 部スビードアップ ! 羽 P48 . 単語単位での移動 羽 P47 . 論理行と表示行を区別しよう 自分の指はホームボジションから外さない 6 羽 P46 ・・ 70 ・・ 72 ・・ 75 ・・ 77 ・ 78 ・・ 81 ・・ 85 ・・ 90 ・・ 93 ・・ 96 ・ 97 ・・ 99 ・・ 1 01 ・・ 104 1 1 1 1 1 3 ・ 133 ・・ 128 ・ 1 24 ・・ 1 1 3 ・・ 156 ・・ 154 ・ 1 51 149 ・・ 145 ・・ 144 ・・ 139 ・ 137 ・・ 133
RTFM (Read the Forgotten Manual) Ⅵ m を終了して、以下のオプションを指定して再起動してみよう。 $ vim -u NONE —N 「 -u NONE 」フラグは、 Vim に起動時に vimrc を読み込まないように伝えるものだ。 この場合、カスタマイズは適用されず、プラグインも無効化される。 vimrc を読み込 まずに Vim が起動すると、 vi 互換モードに退行し、便利な機能の多くが利用できな くなる。ー N フラグを指定すると、「 nocompatible 」オプションが設定され、これを避 けられる。 本書のサンプルの大半については、「 vim -u NONE -N 」テクニックを使うことで、書 いてあるとおりにやればそのとおりの結果になるはすだが、そうはならないものもい くつかはある。 Vim の組み込み機能のなかには Vim スクリプトによって実装されて いるものがある。ということは、それらの機能はプラグインが有効でないと使えない ということだ。以下のファイルは、 Vim の組み込みプラグインに必要な最小限の構成 を記述している。 essential,vim set nocompatible filetype plugin 0 Ⅱ Vim の起動時に、以下のコマンドラインを実行すると、 このファイルを使える。 $ Vim —u code/essential . Vim 自分用の vim て c の代わりに code/essential. vim のパスは適宜調整する必要があるだろう。 Vim の組み込みプ ラグインが有効なときには、 netrw ( 139 ページの TIP43 を参照 ) やオムニ補完 ( 365 ページの TIP117 を参照 ) やその他の機能が利用できる。筆者的には、 Vim のデフォ ルト設定とは、組み込みプラグインを有効化し、 vi 互換モードを無効化するものだと 考えている。 各 TIP の先頭に「前準備」があるか注意しよう。 TIP の内容を試してみるには、前 準備のとおりに Vim を構成する必要がある。 Vim のデフォルト設定で起動して、カス 22 それでも問題があるのなら、 23 ページの「 Vim のバージョン」を参考にしてほしい。 るはすだ。 タマイズをオンザフライですれば、とくに問題なく、これらの TIP の手順を再現でき