Vim

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

テンプレート:Infobox Vimヴィムまたはヴィアイエム)は、vi から派生し、発展した高機能なテキストエディタである。

概要

Vimはオランダ人のプログラマーBram MoolenaarによってAmiga向けに開発された。のちにWindowsを含むさまざまな環境に移植され、特にUnix系オペレーティングシステム (OS) ではEmacsと並んで広く使用されているテキストエディタとなっている。

Vimという名称は、オリジナルのviエディタに近づくことを目標として、開発当初Vi IMitation(viの模倣)の略とされていた。しかし、やがてviを超えることを目指してVi IMproved(viの改良)とされるようになり、今日ではオリジナルのviを大きく上回る機能を持つに至っている。

VimはGUIを必要とせずCUIでも動くため、Unix系OSに標準のエディタとして搭載されていることが多い。コンピュータの大容量化と高速化にともない、2000年以降のOSでは viに代わってより高機能な Vim、あるいはその機能劣化版が標準装備されるようになってきている。このため、コマンドライン上でviを実行すると代わりにVimが起動するディストリビューションが一般的となった。

Vimは基本的にCUIで動作するが、GUIで動くVimのことを特にGVim(gVim, gvim, ジーヴィム)と呼び区別している。マウス操作など、GUIであることを生かしたGVimにしかない機能もある。

viエディタと同様、キーボードのみで操作されることを前提としていたため、キーボードのみですべての操作が可能になっている。その基本的な操作方法はviと同じで、状況に応じてモードを使い分けることでテキストを編集していき、小さなコマンドの組み合わせをその場で作ることによって多種多様な機能を実現する。

Windows系エディタ(メモ帳など)などの他のエディタとは操作方法がまるで異なるため、一通りのテキスト編集作業ができるようになるまで慣れが必要となる。しかしながら、一旦慣れてしまえばメモ帳などとは比較にならないほどのテキスト編集速度を得ることができるため、数多くのVim愛好家が存在する。Vimの他の機能と併せて、プログラムコードやシステム設定ファイルを編集するのに特化しているため、特にプログラマーやシステム管理者に利用者が多い。

viと同じく、Vimの特殊なキーボード操作は、テンプレート:独自研究範囲、(他のソフトウェア上で、指が勝手にhjklを叩いている、文字を打った後に Ctrl-[ を押してしまう等の)中毒症状すら起こす者もいたテンプレート:要出典。このためかvi系 (vi, Vim, nvi) のキーボード操作法は、エディタをはじめ、各種ビューワや、ブラウザのプラグインにいたるまでその後のソフトウェアの操作方法に強い影響を与えていった。特にMozilla FirefoxのアドオンであるVimperatorテンプレート:要出典範囲

ファイル:Vim-split.png
Vim の分割スクリーン

Vimの大きな特徴として高いカスタマイズ性を挙げることができる。オリジナルのviがどんな環境でも設定なしですべての機能が利用できる万人向けのエディタだったのに対し、Vimでは設定ファイルを用いることでより個人の好みにあったエディタにカスタマイズすることができる。

エディタの詳細設定は主に ~/.vimrc(Windows版では %USERPROFILE%\_vimrc)というファイルに書いておき、起動時にVimがそれを読み込むことで設定が反映される仕組みになっている。Vimは独自のスクリプト言語 (Vim script) を用いて自身の機能を拡張することができ、かなり幅広い機能強化を行うことが可能である。有志らによって書かれた有用なスクリプトはプラグインとして www.vim.org 上や個人のブログ上で公開されている。~/.vim(windows版では %USERPROFILE%\vimfiles)フォルダ以下にこれらのプラグインファイルを置くことで機能を拡張できる。

Vimは、多言語、多コーデックを扱うことができ、iconvで対応しているものならばたいてい利用できる。しかし日本語などのマルチバイト文字を書くには不便が多く、もっぱら英文編集での利用が一般的である。

ライセンス形態は、GPL互換のチャリティウェアとなっており、いわゆるフリーでオープンソースなソフトウェアとして配布されており、Vimを起動するとウガンダの子供たちへの援助を募るメッセージが表示される。

歴史

Vim 誕生のきっかけは、ブラム・ムーリナー[1]が1980年代の終わりにAmigaコンピュータを購入したことによる。彼はエディタとしてviを使おうとしたが、当時Amiga用のviは存在しなかった。そこでviのクローンテンプレート:音声ルビを元にしてVimのバージョン1.0を開発した。最初の第一目標はviの機能をまねることだったので、その頃のVimVi IMitationviの模造品)の略とされていた。1991年にVimのバージョン1.14がいわゆる「Fred Fish ディスク #591」というAmiga用のフリーウェア集に収録され、公開されることとなった。

日時 バージョン 変更点
1987年7月 N/A ティム・トンプソンが Atari ST 向けに vi クローン Stevie[2]を公開した。ソースコードは Usenet[3][4]に投稿された。
1988年6月 N/A トニー・アンドリュースが Stevie を改良し、UNIXOS/2に移植し、バージョン3.10としてUsenet[3][5]に投稿した。
1988年 1.0 ブラム・ムーリナーが Stevie を元にして Amiga OS 向けにVim[6]を開発した。ただし非公開。
1991年11月2日 1.14[7] VimAmigaFred Fish disk #591[8]に収録された。
1992年 1.22[7] UnixMS-DOSに移植された。
1993年11月14日 2.0 このバージョンから VimVi IMproved の略称とされた。
1994年8月12日 3.0[7] Windowsをサポート。複数バッファ機能。
1996年5月29日 4.0[7][9] GUI版の公開
1998年2月19日 5.0[7][10] シンタックスハイライトとスクリプト言語(ユーザ定義関数、コマンド)のサポート
1998年4月6日 5.1 バグ修正と様々な改良
1998年4月27日 5.2 長期サポート、ファイルブラウザ、ダイアログ、ポップアップメニュー、セレクトモード、ユーザ定義関数、ユーザ定義コマンド、テンプレート:音声ルビのサポートなど
1998年8月31日 5.3 バグ修正
1999年7月25日 5.4 簡単なファイル暗号化、様々な改良
1999年9月19日 5.5 バグ修正と様々な改良
2000年1月16日 5.6 新しいシンタックスファイル。バグ修正など。
2000年6月24日 5.7 同上
2001年5月31日 5.8 同上
2001年9月26日 6.0[7][11] 折りたたみ、プラグイン、多言語サポート、垂直分割ウインドウなど。
2002年3月24日 6.1 バグ修正
2003年6月1日 6.2 GTK2、アラビア語のサポート、バグ修正など
2004年6月7日 6.3 マーク機能、翻訳、バグ修正など
2005年10月15日 6.4 外部スクリプト言語インタフェースの追加(PerlPythonRuby)、多数のバグ修正など
2006年5月7日 7.0 [12] スペルチェック、自動補完、タブページ、ハイライト機能の強化、アンドゥー機能の改良など
2007年3月12日 7.1 シンタックスファイルの追加、ランタイムファイル、バグ修正など
2008年8月9日 7.2 [13] Vimスクリプトでの浮動小数点のサポート、スクリーン描画のコードのリファクタング、シンタックスファイルの追加、など
2010年8月15日 7.3 スクリプト言語LuaPython3をサポート。 Blowfish暗号化、 制限なしアンドゥーとリドゥー
2013年8月10日 7.4 新しい高速な正規表現エンジン

移植された環境

viエディタはもともとUnix上でしか動作しなかったが、VimAmigaOS(公開時のプラットフォーム)だけでなく、Atari MiNTBeOSDOSWindowsIBM OS/2OS/390MorphOSOpenVMSQNXRISC OSUNIXLinuxBSDMac OS[14]Mac OS X[15]など、多数のプラットフォームに移植されてきた。

また、独立した移植版がAndroid[16]iOS[17]でも動作する。

その他

誕生から25年近く経ち、機能追加を重ねることで、Vimはソースコードが30万行を超える巨大で煩雑なアプリケーションになった。 この巨大化したコードを刷新して、現代的なアーキテクチャに作り変えようとNeovimプロジェクトが2014年2月にフォークした。 プラグインの互換性を保ちながら、より自由度の高い機能を提供できるようにすること、内部構造をスリム化しメンテナンスしやすくすることが目的として挙げられている。 このプロジェクトはbountysource.comで3万ドル強の出資金を集めることに成功している[18]

モード切替

Vim は複数のモードを用いてテキストの編集を行う。この独特な機能は初学者を混乱させやすい。

あらゆるエディタは、テキストの挿入とエディタに与えるコマンド指示を区別するという意味でモードを持つと言えるが、他のほとんどのエディタはこのモードを全く異なる方法で実装している。Vimvi と同様、モード毎にキー割り当ても切替わるという点において独自性を持つ。これによって、マウスやメニューを全く使わず、最低限のメタキーの使用だけで全ての編集機能を使えるようになっている。

Vim には6つの基本モードと5つの派生モードが存在する。しかしながら実質使用されるのは次の4つのモードであり、その他のモードは重要ではなく、特に意識されていない。

モード 状態
ノーマルモード カーソル移動やテキストの削除、コピー、ペーストなどの簡単な指示を行う。
ビジュアルモード テキストを選択するだけのモード。
挿入モード 実際にテキストを入力するモード。
コマンドラインモード ファイルを開いたり、検索・置換などの様々な指示を行う。

その他のモード

  • セレクトモード
  • Exモード
  • 演算子未解決モード
  • 置換モード
  • 挿入ノーマルモード
  • 挿入ビジュアルモード
  • 挿入セレクトモード

もっとも簡単な使い方の例としては、

  1. コマンドラインモードでファイルを開き、
  2. ノーマルモードでカーソルを移動させ、
  3. 挿入モードでテキストを入力し、(テンプレート:Keypress キーで再度ノーマルモードに戻り)
  4. コマンドラインモードでファイルを保存する。

ノーマルモード

普通の編集コマンドを全て入力することができる。 カーソルの移動をしたり、いくつかのキーを押すことでショートカットのように編集することができる。

キーボード操作 コマンド表現 機能
テンプレート:Keypress j 下にカーソル移動
テンプレート:Keypress k 上にカーソル移動
テンプレート:Keypress h 左にカーソル移動
テンプレート:音声ルビ l 右にカーソル移動
テンプレート:Keypress テンプレート:Keypress dw 単語を削除
テンプレート:Keypress テンプレート:Keypress yy 一行コピー
テンプレート:Keypress+テンプレート:Keypress 1ページ下にスクロール

エディタの起動時にはこのモードで始まり、他のモードはこのモードから起動する。全ての操作の中心となる重要なモード。他のモード中に テンプレート:Keypressテンプレート:Keypress+テンプレート:Keypressテンプレート:Keypress+テンプレート:Keypress を押すことでこのモードに移行できる。操作中にどのモードにいるのか分からなくなった場合は テンプレート:Keypress を押すとノーマルモードに移行できる。

演算子未解決モード

ノーマルモードの派生モード。「実行範囲の指示が必要なコマンド」を実行した場合にVimが指示を待っている状態。

例えば、ノーマルモードで テンプレート:Keypressキー[19]を押すとこのモードに入る。続けて テンプレート:Keypress キーを押した場合は一行削除、テンプレート:Keypress[20]を押した場合は一単語削除、テンプレート:Keypress(行末の意)を押した場合は行末までを削除、となる。テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress とキーボード操作すると、カーソル位置から5行分の削除となる。

ビジュアルモード

テキストの部分選択を行うだけのモード。選択後に別途コマンドを与えることにより、選択領域のコピーや削除を始めとしたテキスト処理を行う事が出来る。

テキスト選択中にも移動コマンドなどを行う事ができ、選択範囲を素早く変更できる。移動コマンド以外のコマンドを使うと選択領域に対してそのコマンドが実行される。

ノーマルモードから下記の操作でこのモードに移行できる。その区別は、

キーボード操作 コマンド表現 機能
テンプレート:Keypress v 文字単位のビジュアルモードに移行
テンプレート:Keypress V 行単位のビジュアルモードに移行
テンプレート:Keypress+テンプレート:Keypress 矩形選択ビジュアルモードに移行
テンプレート:Keypress テンプレート:Keypress gv 前回選択した範囲をもう一度選択

このモードの時にはコマンドラインに「-- VISUAL --」と表示される。

セレクトモード

ほとんどビジュアルモードと同じだが、印字可能文字が入力されると選択範囲を削除して挿入モードに入る。Windows の選択モードに似ている。

ノーマルモードから テンプレート:Keypress テンプレート:Keypressテンプレート:Keypress テンプレート:Keypressで移行できる。また、ビジュアルモード時に テンプレート:Keypress+テンプレート:Keypress で移行できる。

このモードの時はコマンドラインに「-- SELECT --」と表示される。

挿入ビジュアルモード

挿入モードでビジュアル選択を開始したときのモード。

例えば テンプレート:Keypress+テンプレート:Keypress テンプレート:Keypressテンプレート:Keypress+テンプレート:Keypress テンプレート:Keypressテンプレート:Keypress+テンプレート:Keypress テンプレート:Keypress+テンプレート:Keypress を実行するとこのモードに入る。

このモードの時にはコマンドラインに「-- (insert) VISUAL --」と表示される。

挿入セレクトモード

挿入モードでセレクトモードを開始したときのモード。

例えばマウスをドラッグしたり、テンプレート:Keypress+テンプレート:Keypress を押したときこのモードに入る。

このモードの時にはコマンドラインに「-- (insert) SELECT --」と表示される。

挿入モード

このモードでは、タイプされたテキストがそのまま書き込まれる(Windows のメモ帳などでテキストを入力する場合と同じ)。ノーマルモードから テンプレート:Keypressテンプレート:Keypressテンプレート:Keypressテンプレート:Keypressテンプレート:Keypressテンプレート:Keypress などをタイプすることで挿入モードに移行できる。

キーボード操作 コマンド表現 機能
テンプレート:Keypress i カーソル位置の前から挿入モードを開始する。
テンプレート:音声ルビ I 行の先頭から挿入モードを開始する。
テンプレート:Keypress a カーソル位置の後から挿入モードを開始する。
テンプレート:Keypress A 行末から挿入モードを開始する。
テンプレート:Keypress o カーソルの下に空行を挿入し、その先頭から挿入モードを開始する
テンプレート:Keypress O カーソルの上に空行を挿入し、その先頭から挿入モードを開始する

他にもこのモードに移行するためのコマンドがいくつかある。

このモード時にはコマンドラインに「-- INSERT --」と表示される。

挿入ノーマルモード

挿入モード時に一度だけノーマルモードのコマンドを実行できる。挿入モード時に テンプレート:Keypress+テンプレート:Keypress(または テンプレート:Keypress キー)を押すのが面倒なときに使用される。

挿入モード時に、 テンプレート:Keypress+テンプレート:Keypress で挿入ノーマルモードに入る。

このモードの時にはコマンドラインに「-- (insert) --」と表示される。

置換モード

ノーマルモードからRでこのモードに移行する。文字をタイプするとその分文字が置換されていく。 抜けるには テンプレート:Keypress+テンプレート:Keypress を押す。

コマンドラインモード

ウインドウの下部に一行のテキストを入力できる。

コマンドや関数の実行、検索、置換処理など多様な処理を行うことができる。

ノーマルモードから テンプレート:音声ルビテンプレート:音声ルビテンプレート:音声ルビを押すことで移行できる。

キーボード操作 機能
テンプレート:Keypress コロンに続けてコマンドを打ち込み、テンプレート:Keypress キーで実行する。補完機能あり。ヘルプテキストには「:sort」などとコロンで始まるテキストで書いてある。
テンプレート:Keypress 前方検索を行う。続けて検索したい文字列のパターンを正規表現で入力し、テンプレート:Keypress キーで検索を開始する。インクリメンタルサーチ可。
テンプレート:Keypress 後方検索を行う。続けて検索したい文字列のパターンを正規表現で入力し、テンプレート:Keypress キーで検索を開始する。インクリメンタルサーチ可。
テンプレート:Keypress 外部コマンドでフィルタ処理する。続けて実行するコマンド文字列を入力し、テンプレート:Keypress キーでコマンド実行を開始する。
Exモード

コマンドラインモードの変種。コマンドラインモードとは次の点で異なる。

  • 毎回 テンプレート:Keypress(コロン)を押す必要がない。
  • コマンド実行後もExモードに留まる。
  • コマンドを実行するごとに画面が更新されない。
  • 通常のコマンドライン編集機能が使えない。
  • マップと短縮入力が使えない。

ノーマルモードから テンプレート:Keypressテンプレート:Keypress テンプレート:KeypressExモードに移行できる。テンプレート:Keypress テンプレート:Keypress の場合はコマンドライン編集や補完が使えるようになる。 Exモードを抜けるときは :vi(または :visual)を使う。

起動と終了

起動方法

コマンドライン上で、次のコマンドを実行する。 下のコマンドは Unix のコマンドラインで動作するが、Windows 版も基本的に同様のコマンドで起動できる。

コマンド 概要
vim [options] [file ..] ファイルを編集する
vim -g [options] [file ..] ファイルを編集する
gvim [options] [file ..] ファイルを編集する

詳しいコマンドラインオプションについて知りたいならば、次のいずれかのコマンドを実行する。

コマンド 概要
man vim vimのマニュアルを読む
vim --help vimのヘルプを出力

vim について初めて学ぶ者は次のコマンドを実行するとチュートリアルを起動できる。

コマンド 概要
vimtutor [-g] [言語]
  • -g オプションで gvim 起動。
  • 言語ja にすると日本語でチュートリアルを始められる。

以下に vim 関連のコマンドをまとめる。

コマンド 概要
  • vim
通常起動。デフォルト。
  • ex
Exモードで起動。ノーマルモードに戻るには :vi を実行。 -e オプションを付けた場合と同じ。
  • view
読み取り専用(リードオンリー)モードで起動。-R オプションを付けた場合と同じ。
  • gvim
  • gview
GUIバージョン。-g オプションを付けた場合と同じ。
  • evim
  • eview
GUIバージョンのイージー(簡単)モードで起動。-y オプションを付けた場合と同じ。
  • rvim
  • rview
  • rgvim
  • rgview
制限版。-Z オプションを付けた場合と同じ。
  • vimtutor
チュートリアルを起動。

実際には、vim コマンド以外はほぼ vim のオプションで代替できるので、環境によっては用意されていないこともある。

終了方法

Vimを終了させたい時は、

キーボード操作 コマンド表現 機能
テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :q バッファを一つ閉じる。:quit と同じ。他に開いているウインドウがあればアプリケーション自体は閉じない。
テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :qa 開いているバッファを全て閉じる。:qall:quitall と同じ。

保存して終了させたい時は、

テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :wq 現在のバッファを保存して閉じる。
テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :x :wq とほぼ同だが、書き込みが行われるのは変更点がある時だけである。
テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :wqa 全てのバッファを保存して閉じる。
テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress テンプレート:Keypress :xa :wqa とほぼ同じだが、書き込みが行われるのは変更点がある時だけである。

中断したい時は、ノーマルモードで テンプレート:Keypress+テンプレート:Keypress を押す。gVim ではタスクバーに最小化されるが、端末版ではプロセスをバックグラウンドに移す。

また、ノーマルモード時に テンプレート:Keypress テンプレート:Keypress で保存せずに終了、ノーマルモード時に テンプレート:Keypress テンプレート:Keypress で保存して終了となる。

カスタマイズ

Vimvi とは異なり、個人の好みに合わせて徹底的にカスタマイズできる。vi は環境非依存で特に設定せずに使うのが一般的だが、プログラマ向けの vim は設定を多用して各個人向けに使いやすくするのが一般的である。その設定の範囲は基本的なインタフェースから、キーボードマクロまで幅広い。

Vim は、独自のスクリプト言語(vimスクリプト、:help vim-script-intro)を持っており、カスタマイズ処理は主にこの言語で記述する。テンプレート:Url や個人のブログ上で、便利なスクリプトがプラグインとして公開されている。Vimスクリプトは強力だが一方で、モードの概念を織り交ぜて書くことになるため、文法が複雑で分かりにくく見づらいという欠点を持つ。このため、プラグインを書くのはある程度慣れが必要となる。カスタマイズ用のスクリプトは、コンパイル時に Vim に追加できる PerlPythonRuby などのインタフェースを使用して記述することもできる。

Vim の初期設定は主に ~/.vimrc[21]というテキストファイルで行い、~/.vim ディレクトリ[22]に多数のプラグインスクリプトを配置することによって機能拡張を実現する。個人の設定は多種多様だがほとんどのユーザーは、~/.vimrc にはオプション:help options)やキーマップの変更などを記述する。

set コマンドでオプションを設定する。 オプションの名前に no を付けるとその否定になる。

コマンド 意味
set nocompatible vi と互換モードにしない
set number 行番号を表示する
set autoindent smartindent プログラミング用に自動インデントする
set expandtab タブ文字をスペース文字に変換する
set nobackup バックアップをとらない。
syntax on 構文強調表示機能を有効にする
nnoremap ; : キーマップの変更。
vnoremap ; : キーマップの変更。
inoremap <C-a> <C-o>0 キーマップの変更。
inoremap <C-e> <C-o>$ キーマップの変更。

~/.vim 以下はある程度用途ごとにディレクトリが分けられている。 ダウンロードしたプラグインは指定されたディレクトリに置くことで動作する。

細かい説明はVim-users.jp - Hack #34: Vim のディレクトリ構成を参照。

~/.vimrc
~/.vim/
    after/
    autoload/
    compiler/
    colors/
    doc/
    plugin/
    ftdetect/
    ftplugin/
    syntax/
    indent/
    macros/

プラグイン

プラグインのVimスクリプトは、上記の適当なディレクトリに配置することで動作する。

しかし、Vim.org からダウンロードしてきた第三者によるプラグインファイル(しばしば複数のファイルから成る)は、自分で解凍して複数のディレクトリに配置しなければならなかった。このため、自分の書いた設定ファイルと、第三者の書いたプラグインとが混在し、プラグインが増加するにつれて管理が複雑化することが多かった。

特に後者はバージョンもすべて自己責任で更新する必要があったため、テンプレート:独自研究範囲

プラグインの管理

Vimball による管理

プラグイン管理の負担を軽減するために、Vimがバージョン7になると、Vimball(ヴィムボール)と呼ばれる機能が搭載されるようになった。これはプラグインをVimballという形式に圧縮して単一のファイルでプラグインを提供しようとするものである。このVimballを使うことでプラグインのインストール・アンインストールを簡便に行う事ができ、プラグインのインストール面での負担が軽減された。Vimball形式で提供されているプラグインをインストールするには、Vim.org からダウンロードしてきたファイル(拡張子 .vba)を手持ちのVimエディタで開き、:so % を実行することで自動的に展開されて、インストールできる。このときインストールしたプラグイン情報も記録されるのでアンインストールもできる。

アンインストールするには、次のコマンドを打ち込むことでアンインストールできる。

:RmVimball [プラグインの名前]

その他の使用法については:h vimballで確認できる。

しかしながらVimball形式に対応したスクリプトが非常に少なかったことや、プラグインのバージョン管理まで面倒を見てくれなかったことから、プラグイン管理の負担が劇的に改善されることはなく、現在は主流の管理方法ではなくなってきており、Gitを用いた方法に移行しつつある。

GitHub による管理

2000年代後半になるとプラグインの管理方法は大きく変わりはじめた。それはGitHubの登場によって多数のプラグインが、分散型バージョン管理システムGitで管理されるようになってきたためである。GitHubが個人に無料でスペースを提供したため、自分の設定ファイル群である ~/.vim (dotvim, vimfiles) をGitHub上で管理する者が増加し、プラグイン管理もすべてGitで管理したいという需要が出てきた。

まず、pathogen(パソゲン、Tim Pope氏作)というプラグインが登場した。これは自分の~/.vim全体をGitで管理し、第三者プラグインはGitのsubmodule機能によって管理するようにした。これのプラグインの登場により、第三者プラグインと自分の書いたプラグインとを別々に管理できるようになったことで、Vimball形式の時の問題点はほとんど解決され、プラグイン管理の負担をかなり劇的に低減させることに成功した。さらにGitを使った利点として、自分で好きなようにフォークして変更できることも大きなメリットであった。

しかし、Gitによってプラグインの更新が楽になったとはいえ、その更新もインストールもプラグインごとに管理しなければならない点は変わらなかった。2010〜2011年になると、その部分を自動化し改良したVimスクリプトが登場した。それが、Vundle(バンドル、gmarik氏作)とNeobundle.vim(ネオバンドル、Shougo氏作)である。これらのスクリプトを用いることで使いたいプラグインの名前やレポジトリを列挙するだけで、コマンドひとつで一括インストール、一括更新が可能になった。これに呼応する形でVim.orgにアップロードされていたプラグインもその殆どがGitHub上に移植された。

これらのプラグイン管理用のプラグインが整備されたことにより、初期(数年前まで)の管理方法に比較するとVimのプラグイン管理の環境は格段に向上した。

代表的なプラグイン

Vim.orgでホストされているVimのプラグインは、もともと小さな機能をもったスクリプトが多かった。しかしながら、2000年代後半のここ数年でVimには高性能で多機能なプラグインが急激に増加してきた。その背景には、コンピュータの高性能化や、Vimスクリプトのハックが進んだことなどが挙げられる。テンプレート:要出典範囲

下に、汎用的で代表的なプラグインを挙げる(順不同)

Align
テキストの整形
Unite
ファイル一覧、最近開いたファイル一覧、バッファ一覧、リファレンス表示など、様々なものを表示できる。自分で拡張したり、他のプラグインとの連携ができる。
Neocomplcache
Vimの補完機能を向上させる。拡張することでコードスニペットの補完ができる。
Vimshell
Vim内でシェルをエミュレートする。
Vimfiler
フル機能のファイラー
Emmet
HTMLの編集にZen Codingが使えるようになる。zencodingの後継プラグイン。
Eregex
Vimの分かりにくい正規表現を、Perlなどで使われる一般的な正規表現で書けるようにする。
Quickrun
現在開いているバッファのコードを、シェルに戻ることなく手軽に実行できる。
Vim-ref
Vimでperldocやpydocなどのリファレンスを手早く閲覧できる。
Surround
Vim 7から導入されたテキストオブジェクトを便利に扱うことができる。
NERD-Commenter
コードのコメントアウトを手軽に行える。
NERD-Tree
ディレクトリ構造をツリー表示する。gVimではマウス操作にも対応している。
Project
IDEのようにファイルの管理を強化する。
YankRing
レジスタ(クリップボード)に履歴の機能を追加する。
Matchit
「対応するカッコに飛ぶ」の機能を強化し、例えばRubyのendでも移動できるようにする。
Calendar
Vimにカレンダーを搭載。日記も書くことができる。
Buftabs
ステータスライン上にバッファの一覧を表示する。
Syntastic
ファイルを保存すると自動的に構文チェックなどを行い、エラーのある箇所を表示する。サポートするプログラミング言語も豊富。

機能

概要

ファイル:Screenshot-vim2.png
Vim の機能:行数、Unicode、構文のハイライト、テキストの折り畳み
ファイル:Screenshot vim7 word completion.png
Vim7 における新機能:スペルチェックとドロップダウン付きの単語補完

viというとコンパクトでありながら豊富なテキスト操作手段をもつエディタという印象が一般に持たれている。いっぽうVimは多くのコマンドを追加しており、オムニ補完や構文強調、リアルタイムスペルチェックなどの機能も次々と導入されており、もはやviのもつコンパクトという性質は引き継いでいない。

  • 設定によりオリジナルのviとほぼ互換の操作を実現 (set compatible)
  • マルチバッファ
  • 任意個数ウィンドウ分割(縦、横)
  • リスト辞書を備えた独自のスクリプト言語を実装している
  • スクリプト中からPerlRubyPythonTclMzSchemeを呼び出せる
  • 登録略語補完(アブリビエイション)
  • 動的単語補完
  • 多段階アンドゥ
  • C / C++JavaRubyPythonなど40以上の言語に対応したオートインデント
  • ctagsを利用したタグジャンプ
  • クラッシュしても、ほぼ直前のファイルを復元可能
  • カーソル位置や開いているバッファ状態の保存・復元(セッション機能)
  • 2つのファイルの差分を色分けし、同期スクロールして表示するdiffモード
  • リモートファイル編集
  • オムニ補完(インテリセンスと同等の機能)

画面分割とタブ

VimはGNU screenと同じように画面分割して編集することができる。左右分割して2つのファイルを差分表示してみせたり、上下分割で上にヘルプ表示しながら編集を進めたりできる。ウインドウの移動には Ctrl-w w、 Ctrl-w j[khl] を用いる。

Vim 7からはタブ表示機能が加わり、さらに多くのファイルを同時編集可能になった。タブの移動にはgt 、gTを用いる。

この機能をさらに便利にするものとしてUniteやVimshell、quickrunなどのプラグインが開発されている。特にUniteはこれまでのバッファ管理プラグインを包括する多機能なプラグインとしてテンプレート:誰範囲2

補完機能

Vimには補完機能が備わっており、挿入モード中 Ctrl-n 、Ctrl-p で文中の単語をポップアップ表示、補完することができる。コマンドモード中でも補完をさせることができる。近年ではneocomplcacheというプラグインを用いることで、ほぼ何でも補完対象にすることができるようになっている。

強調表示

Vimは非常に多くのテキストファイル、ソースコードを色分けできる。デフォルトで400以上の文法を色分けすることが可能であり、この数は他のテキストエディタと比較して群を抜いている。特にViやVimを用いてUNIXの設定ファイルを編集するケースが多いことから/etc以下のかなりのファイルが色分け表示される。

また、正規表現を駆使することで必要に応じて拡張できる。その設定ファイルは一般的に~/.vim/syntax以下に収められる。さらに色分けのカラースキームも自由に変更でき、自分の好みに応じて様々に使い分けることができる。

ヘルプ機能

ファイル:Vim-(logiciel)-aide.png
Vim のヘルプ: 検索方法 ':helpgrep evim'。下が見つかった場所で、上が選択した場所に対するヘルプテキスト

Vimにはテキスト形式の膨大なドキュメントが存在する。また、Vimでは問題の解決法を見付けるためのさまざまな機能が提供されている。構文のハイライトやVim独自のヘルプの文法によって、キーワードはさまざまな色で強調表示される。キーボードショートカットウェブブラウザのようにキーワード間を行き来することができる。更にGUI版ではマウスを使っても移動することができる。ユーザが楽に解決法を探すための機能は他にもあり、そのうち主なものは ':helpgrep' コマンドである。これを用いれば、ユーザはヘルプ全体の中から単語を探すことができ、':cwindow' でもう一つのウィンドウ内にヒットしたものが表示され、それによってヘルプ内の一致する箇所へ移動することができる。Vimのヘルプ機能でヒットリスト内から更に単語を探すこともできる。

プログラマ支援

Vimはプログラマによって開発されたプログラマのためのエディタである。Vimにはプログラマの仕事を楽にするための機能が備わっている。統合開発環境と同様、ソースファイルを編集した後Vimから直接コンパイルできる。コンパイルエラーが発生したときには、もう一つのウィンドウが表示される。エラーメッセージに基づいて、直接他のウィンドウ内に表示されたソースファイルのエラーの出た箇所へジャンプすることができる。構文のハイライトやテキストの折り畳みもプログラマにとって役立つ機能として挙げられる(':help quickfix'参照)。

ファイルの差分

ファイル:Vim-(logiciel)-diff-repli.png
Vim を使ったファイルの比較

しばしば行われる作業に異なるバージョンのファイルの比較がある。Vimには2つのバージョンのファイルを2つのウィンドウに並べて、差分をさまざまな色で表示する機能がある。変更された行や挿入された行は色を付けて強調され、変更のない範囲は折り畳まれて表示される。図では変更された行は赤で、挿入された行は青色で表示されている。折り畳まれた箇所は灰色になっている。UNIXではvimdiffコマンドでもこの機能を利用できる。

スクリプト言語

ファイル:Vim-(logiciel)-script-calendar.png
カレンダーのスクリプト(左)とそのソース(右)を表示したVim

Vimには独自のスクリプト言語が備わっており、それを用いればマクロで対応するのが難しいような複雑な作業を自動化できる。Vimのスクリプトは-sオプションを付けて起動したり、いわゆるプラグインディレクトリ内に入れたりすれば読み込まれる。':source' コマンドでもスクリプトが読み込まれ実行される。Vimスクリプトの例にVimの設定ファイルがあり、UNIXやLinuxでは .vimrc、Windows では_vimrcというファイル名になっていることが多い。このファイルは起動時に自動的に実行される。

Vimのスクリプト言語ではコマンドラインコマンドが全て利用でき、':normal' コマンドで通常モードの全てのコマンドも使うことができる。この言語では数と文字列の2つのデータ型が用意されている。ブール値は数で実現され、0は偽でそれ以外の数は真と評価される。また、重要な比較演算子や基本的な算術演算子もある。制御構造も用意され、if文while文が使える。さらにユーザが自前の関数を定義でき、100を超える定義済み関数を利用できる。作成したスクリプトはデバッグモードでテストすることができる。

弱点

  • 1行が長いと処理が非常に遅くなる
  • 独自のスクリプト言語の仕様が煩雑。自動実行系、ウィンドウ管理系のコマンドが貧弱
  • C-1 など、マッピングできないキーが存在する(キャラクタ端末アプリケーションであるための制限)

Vimと似た操作体系をもつアプリケーション

脚注

  1. テンプレート:Lang-en-short
  2. ST editor for VI enthusiasts の頭文字から命名
  3. 3.0 3.1 テンプレート:Cite web
  4. テンプレート:Cite newsgroup
  5. テンプレート:Cite newsgroup
  6. テンプレート:Lang-en-short
  7. 7.0 7.1 7.2 7.3 7.4 7.5 テンプレート:Cite web
  8. テンプレート:ドメイン名
  9. テンプレート:Cite web
  10. テンプレート:Cite web
  11. テンプレート:Cite web
  12. テンプレート:Cite web
  13. テンプレート:ドメイン名
  14. :help sys-file-list
    テンプレート:Cite web
  15. テンプレート:Cite web
  16. テンプレート:Cite web
  17. テンプレート:Cite web
  18. テンプレート:Cite web
  19. delete の意
  20. word の意
  21. ヴィムアールシー、Windows版では _vimrc
  22. Windows版では vimfiles

関連項目

テンプレート:Portal

参考文献

外部リンク

テンプレート:Sister

テンプレート:テキストエディタ