Vim
{{Infobox Software | 名称 = Vim | スクリーンショット = [[Image:Vim-(logiciel)-aide.png|300px]]| 説明文 = gvimのスクリーンショット (上部にマウスなどGUIで操作可能なメニューあり)| ロゴ = [[Image:Vimlogo.svg|200px]] | 最新版 = 7.3 | 最新版発表日 = 2010年8月15日 | 最新評価版 = | 最新評価版発表日 = | 開発元 = [[Bram Moolenaar]] など | 対応OS = [[Amiga]]、[[BeOS]]、[[BSD]]、[[Linux]]、[[Mac OS]]、[[Mac OS X]]、[[Microsoft Windows|Windows]]、[[MS-DOS]]、[[OpenVMS]]、[[OS/2]]、[[OS/390]]、[[UNIX]]、[[iOS (アップル)|iOS]]など | 種別 = [[テキストエディタ]] | ライセンス = [[GNU General Public License|GPL]] 互換の[[チャリティウェア]] | 公式サイト = http://www.vim.org/ | }} '''Vim'''('''ヴィム'''または'''ヴィアイエム''')は、[[vi]] から派生し、発展した高機能な[[テキストエディタ]]である。 == 概要 == オランダ人のプログラマーBram Moolenaarによって[[Amiga]]向けに開発されたが、現在はさまざまな環境に移植され、特に[[UNIX]]系OSでは[[Emacs]]と並んで広く使用されているテキストエディタとなっている。 Vimという名称は、オリジナルの[[vi]]に近づくことを目標として、開発当初'''V'''i '''IM'''itation(viの模倣)の略とされていた。 しかし、やがてviを超えることを目指して'''V'''i '''IM'''proved(viの改良)とされるようになった。実際、現在のVimはオリジナルの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]])のキーボード操作法は、エディタをはじめ、各種ビューワや、[[ブラウザ]]のプラグインにいたるまでその後のソフトウェアの操作方法に強い影響を与えていった。 viがどんな環境でも設定なしですべての機能が利用できる万人向けのエディタだったのに対し、Vimでは設定ファイルを用いることでより個人の好みにあったエディタに[[カスタマイズ]]することができる。 エディタの詳細設定は主に ~/.vimrc(Windows版では ~/_vimrc)というファイルに書いておき、起動時にVimがそれを読み込むことで反映される仕組みになっている。 Vimは独自のスクリプト言語を用いて自身の機能を拡張することができる。[[Emacs Lisp]]ほどの柔軟性はないものの、かなり幅広い機能強化を行うことが可能である。 有志らによって書かれた有用なスクリプトはプラグインとして [http://www.vim.org/ www.vim.org] 上や個人のブログ上で公開されている。 ~/.vim(windows版では ~/vimfiles)フォルダ以下にこれらのプラグインファイルを置くことで機能を拡張できる。 あまり一般的ではないが、vimball(ヴィムボール)という形式でプラグインのインストールとアンインストールを管理することもある。 Vimは、多言語、多コーデックを扱うことができ、[[iconv]]で対応しているものならばたいてい利用できる。 しかし日本語を書くには不便が多く、もっぱら英文編集での利用が一般的である。 ライセンス形態は、GPL互換のチャリティウェアとなっており、いわゆるフリーでオープンソースなソフトウェアとして配布されている。 == 歴史 == Vim 誕生のきっかけは、Bram Moolenaar が1980年代の終わりに [[Amiga]] コンピュータを購入したことによる。彼はエディタとして vi を使おうとしたが、当時 Amiga 用の vi は存在しなかった。そこで vi のクローン Stevie を元にして Vim のバージョン1.0を開発した。最初の第一目標は vi の機能をまねることだったので、その頃の '''Vim''' は '''V'''i '''IM'''itation(viの模倣)の略とされていた。 1991年に Vim のバージョン1.14がいわゆる「Fred Fish ディスク #591」という Amiga 用の[[フリーウェア]]集に収録された。 1992年にバージョン1.22が [[UNIX]] と [[MS-DOS]] に[[移植 (ソフトウェア)|移植]]された。このときから '''Vim''' は '''V'''i '''IM'''proved(改良)の略称とされるようになった。 [[Image:Vim-split.png|thumb|Vim の分割スクリーン]] その後、Vim には多くの改良が加えられた。その一里塚となったのは1994年のバージョン3.0で登場した複数の編集ウィンドウであった。それまでは同時に見ることができるファイルの数は一つに限られていた。 1996年に登場したバージョン4.0で初めて [[GUI]] が利用できるようになった。 1998年のバージョンで構文のハイライト機能が掲載された。 2001年のバージョン6.0で折り畳み、[[プラグイン]]、多言語サポート、垂直分割ウィンドウが導入された。 2005年10月にリリースされたバージョン6.4では新機能は追加されなかったものの、多くの[[バグ]]が修正された。 2006年5月のバージョン7.0ではスペルチェック機能の追加やタブのサポートが行われた。 == モード編集 == Vim は複数のモードを用いてテキストの編集を行う。この独特な機能は初学者を混乱させやすい。 あらゆるエディタは挿入とコマンド入力と区別するという意味でモードを持つが、他のほとんどのエディタはこのモードを全く異なる方法で実装している。Vim は vi と同様、モードの出入りでキーボード全体を切替えるという意味で独特である。これによって、マウスやメニューを全く使わず、最低限の[[メタキー]]の使用だけで全ての編集機能を使えるようになっている。 Vimには6つの基本モードと5つの派生モードが存在する。 しかしながら実質使用されるのは次の4つのモードであり、その他のモードは重要ではなく、とくに意識されていない。 *ノーマルモード *ビジュアルモード(-- VISUAL --) *挿入モード(-- INSERT --) *コマンドラインモード その他のモード *セレクトモード(-- SELECT --) *Exモード *演算子未解決モード *置換モード(-- REPLACE --) *挿入ノーマルモード(-- (insert) --) *挿入ビジュアルモード(-- (insert) VISUAL --) *挿入セレクトモード(-- (insert) SELECT --) ==== ノーマルモード ==== 普通の編集コマンドを全て入力することができる。 カーソルの移動をしたり、いくつかのキーを押すことでショートカットのように編集することができる。 j :=> 下にカーソル移動 k :=> 上にカーソル移動 h :=> 左にカーソル移動 l :=> 右にカーソル移動 dw :=> 単語を削除 yy :=> 一行コピー <ctrl>f :=> 1ページ下にスクロール エディタの起動時にはこのモードで始まり、他のモードはこのモードから起動する。全ての操作の中心となる重要なモード。 他のモード中に ESC か Ctrl-[ 、Ctrl-c を押すことでこのモードに移行できる。 ===== 演算子未解決モード ===== ノーマルモードの派生モード。演算コマンドが実行されたあとの演算実行範囲を待っている時のモード。 例えば、ノーマルモードで d を押すとこのモードに入る。続けて d を押すと一行削除、 w を押すと一単語削除、$ を押すと行末までを削除、となる。 ==== ビジュアルモード ==== 領域選択に特化したモード。 移動コマンドで選択範囲が拡大できる。移動コマンド以外のコマンドを使うと選択領域に対してそのコマンドが実行される。 ノーマルモードから v, V, Ctrl-v, gv でこのモードに移行できる。その区別は、 v :=> 文字単位のビジュアルモードに移行 V :=> 行単位のビジュアルモードに移行 Ctrl-v :=> 矩形選択ビジュアルモードに移行 gv :=> 前回選択した範囲をもう一度選択 このモードの時にはコマンドラインに"-- VISUAL --"と表示される。 ===== セレクトモード ===== ほとんどビジュアルモードと同じだが、印字可能文字が入力されると選択範囲を削除して挿入モードに入る。 MS Windowsの選択モードに似ている。 ノーマルモードから gh, gH で移行できる。また、ビジュアルモード時に Ctrl-g で移行できる。 このモードの時はコマンドラインに"-- SELECT --"と表示される。 ===== 挿入ビジュアルモード ===== 挿入モードでビジュアル選択を開始したときのモード。 例えば Ctrl-o v, Ctrl-o V, Ctrl-o Ctrl-v を実行するとこのモードに入る。 このモードの時にはコマンドラインに"-- (insert) VISUAL --"と表示される。 ===== 挿入セレクトモード ===== 挿入モードでセレクトモードを開始したときのモード。 例えばマウスをドラッグしたり、Shift-right を押したときこのモードに入る。 このモードの時にはコマンドラインに"-- (insert) SELECT --"と表示される。 ==== 挿入モード ==== タイプされたテキストがバッファに挿入される(書き込まれる)。 ノーマルモードからi,I,a,A,o,Oなどをタイプすることで挿入モードに移行できる。 i :=> カーソル位置の前から挿入('''i'''nsert)モードを開始する。 I :=> 行の先頭から挿入モードを開始する。 a :=> カーソル位置の後('''a'''ppend)から挿入モードを開始する。 A :=> 行末から挿入モードを開始する。 o :=> カーソルの下に空行を挿入し、その先頭から挿入モードを開始する O :=> カーソルの上に空行を挿入し、その先頭から挿入モードを開始する 他にもこのモードに移行するためのコマンドがいくつかある。 このモード時にはコマンドラインに"-- INSERT --"と表示される。 ===== 挿入ノーマルモード ===== 挿入モード時に一度だけノーマルモードのコマンドを実行できる。 挿入モード時にCtrl-[(ESC)を押すのが面倒なときに使用される。 挿入モード時に、Ctrl-o で挿入ノーマルモードに入る。 このモードの時にはコマンドラインに"-- (insert) --"と表示される。 ===== 置換モード ===== ノーマルモードから R でこのモードに移行する。文字をタイプするとその分文字が置換されていく。 抜けるには Ctrl-[ を押す。 ==== コマンドラインモード ==== ウインドウの下部に一行のテキストを入力できる。 コマンドや関数の実行、検索、置換処理など多様な処理を行うことができる。 ノーマルモードから :(コロン), /(スラッシュ), ?(はてな)を押すことで移行できる。 : :=> コロンに続けてコマンドを打ち込み、Enterで実行する。補完機能あり。 / :=> 前方検索を行う。正規表現が利用できる。インクリメンタルサーチ可。 ? :=> 後方検索を行う。正規表現が利用できる。インクリメンタルサーチ可。 !, !! :=> 外部コマンドでフィルタ処理する。 ヘルプテキストには :sort などとコロンで始まるテキストで書いてある。 ===== Exモード ===== コマンドラインモードの変種。コマンドラインモードとは次の点で異なる。 * 毎回 :(コロン)を押す必要がない。 * コマンド実行後もExモードに留まる。 * コマンドを実行するごとに画面が更新されない。 * 通常のコマンドライン編集機能が使えない。 * マップと短縮入力が使えない。 ノーマルモードから Q, gQ でExモードに移行できる。gQ の場合はコマンドライン編集や補完が使えるようになる。 Exモードを抜けるときは :vi[sual] を使う。 == 起動と終了 == === 起動方法 === コマンドライン上で、次のコマンドを実行する。 下のコマンドはUNIXのコマンドラインで動作するが、Windows版も基本的に同様のコマンドで起動できる。 <code> $ vim [options] [file ..] # file を編集する $ vim -g [options] [file ..] # gvim でfileを編集する $ gvim [options] [file ..] # gvim でfileを編集する</code> 詳しいコマンドラインオプションについて知りたいならば、次のいずれかのコマンドを実行する。 <code> $ man vim # vim のマニュアルを読む $ vim --help # vim のヘルプを出力</code> vimについて初めて学ぶ者は次のコマンドを実行するとチュートリアルを起動できる。 <code> $ vimtutor [-g] [language] # -gオプションでgvim起動。languageにjaを入れると日本語でチュートリアルを始められる。</code> 以下に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を終了させたい時は、 :q # バッファを一つ閉じる。:quit と同じ。他に開いているウインドウがあればアプリケーション自体は閉じない。 :qa # 開いているバッファを全て閉じる。:qall :quitallと同じ。 保存して終了させたい時は、 :wq # 現在のバッファを保存して閉じる。 :x # :wq とほぼ同じ。:wqと違い、変更点があるときのみ書き込む。 :wqa # 全てのバッファを保存して閉じる。 :xa # :wqa とほぼ同じ。:wqaと違い、変更点があるときのみ書き込む。 中断したい時は、ノーマルモードで Ctrl-Z を押す。gVimではタスクバーに最小化されるが、端末版ではプロセスをバックグラウンドに移す。 また、ノーマルモード時に ZQ で保存せずに終了、ノーマルモード時にZZ で保存して終了となる。 == カスタマイズ == Vim は vi とは異なり、個人の好みに合わせて徹底的に[[カスタマイズ]]できる。 vi は環境非依存で特に設定せずに使うのが一般的だが、プログラマ向けの vim は設定を多用して各個人向けに使いやすくするのが一般的である。 その設定の範囲は基本的な[[インタフェース (情報技術)|インタフェース]]から、キーボードマクロまで幅広い。 Vim は、独自のスクリプト言語(vimスクリプト, ":help vim-script-intro")を持っており、カスタマイズ処理は主にこの言語で記述する。 [http://www.vim.org/ www.vim.org] や個人のブログ上で、便利なスクリプトが[[プラグイン]]として公開されている。Vimスクリプトは強力だが一方で、モードの概念を織り交ぜて書くことになるため、文法が複雑で分かりにくく見づらいという欠点を持つ。このため、プラグインを書くのはある程度慣れが必要となる。カスタマイズ用のスクリプトは、コンパイル時に Vim に追加できる [[Perl]] や [[Python]] や [[Ruby]] などのインターフェースを使用して記述することもできる。 Vimの初期設定は主に ~/.vimrc(ヴィムアールシー、Windows版では _vimrc)というテキストファイルで行い、~/.vim ディレクトリ配下(Windows版は vimfiles)に多数のプラグインスクリプトを配置することによって機能拡張を実現する。 個人の設定は多種多様だがほとんどのユーザーは、~/.vimrc には[[オプション]](":help options")やキーマップの変更などを記述する。 setコマンドでオプションを設定する。 オプションの名前にnoを付けるとその否定になる。 また、"(ダブルクオーテーション)より右側はコメントになる。 set nocompatible " viと互換モードにしない set number " 行番号を表示する set autoindent smartindent " プログラミング用に自動インデントする set expandtab " タブ(\t)をスペースに変換する set nobackup " バックアップをとらない。 syntax on " ハイライトシンタックス機能を有効にする " キーマップの変更。 nnoremap ; : vnoremap ; : inoremap <C-a> <C-o>0 inoremap <C-e> <C-o>$ ~/.vim 以下はある程度用途ごとにディレクトリが分けられている。 ダウンロードしたプラグインは指定されたディレクトリに置くことで動作する。 細かい説明は[http://vim-users.jp/2009/06/hack34/ Vim-users.jp - Hack #34: Vimのディレクトリ構成]を参照。 ~/.vimrc ~/.vim/ after/ autoload/ compiler/ colors/ doc/ plugin/ ftdetect/ ftplugin/ syntax/ indent/ macros/ == プラグイン == プラグインの Vim スクリプトは、上記の適当なディレクトリに配置することで動作する。 しかし、[http://www.vim.org/ Vim.org] からダウンロードしてきた第三者によるプラグインファイル(しばしば複数のファイルから成る)は、自分で解凍して複数のディレクトリに配置しなければならなかった。このため、自分の書いた設定ファイルと、第三者の書いたプラグインとが混在し、プラグインが増加するにつれて管理が複雑化することが多かった。 特に後者はバージョンもすべて自己責任で更新する必要があったため、プラグイン管理は決して快適なものではなかった。 ==== Vimball による管理 ==== プラグイン管理の負担を軽減するために、Vim がバージョン 7 になると、'''Vimball'''(ヴィムボール)と呼ばれる機能が搭載されるようになった。これはプラグインを Vimball という形式に圧縮して単一のファイルでプラグインを提供しようとするものである。この Vimball を使うことでプラグインのインストール・アンインストールを簡便に行う事ができ、プラグインのインストール面での負担が軽減された。Vimball 形式で提供されているプラグインをインストールするには、[http://www.vim.org/ Vim.org] からダウンロードしてきたファイル(拡張子 '''.vba''')を手持ちの Vim エディタで開き、:so % を実行することで自動的に展開されて、インストールできる。このときインストールしたプラグイン情報も記録されるのでアンインストールもできる。 アンインストールするには、次のコマンドを打ち込むことでアンインストールできる。 :RmVimball [プラグインの名前] その他の使用法については :h vimball で確認できる。 しかしながら Vimball 形式に対応したスクリプトが非常に少なかったことや、プラグインのバージョン管理まで面倒を見てくれなかったことから、プラグイン管理の負担が劇的に改善されることはなく、現在は主流の管理方法ではなくなってきており、[[Git]] を用いた方法に移行しつつある。 ==== GitHub による管理 ==== 近年になってプラグインの管理方法は大きく変わろうとしている。それは [[GitHub]] の登場によって多数のプラグインが、分散型バージョン管理システム [[Git]] で管理されるようになってきたためである。GitHub が個人に無料でスペースを提供したため、自分の設定ファイル群である ~/.vim(dotvim, vimfiles)を GitHub 上で管理する者が増加し、プラグイン管理もすべて Git で管理したいという需要が出てきた。 まず、[http://www.vim.org/scripts/script.php?script_id=2332 pathogen](パソゲン, Tim Pope 氏作) というプラグインが登場した。これは自分の ~/.vim 全体を Git で管理し、第三者プラグインは Git の submodule 機能によって管理するようにした。これのプラグインの登場により、第三者プラグインと自分の書いたプラグインとを別々に管理できるようになったことで、Vimball 形式の時の問題点はほとんど解決され、プラグイン管理の負担をかなり劇的に低減させることに成功した。さらに Git を使った利点として、自分で好きなようにフォークして変更できることも大きなメリットであった。 しかし、Git によってプラグインの更新が楽になったとはいえ、その更新もインストールもプラグインごとに管理しなければならない点は変わらなかった。 2010~2011年になると、その部分を自動化し改良した Vim スクリプトが登場した。それが、[https://github.com/gmarik/vundle Vundle](バンドル, gmarik 氏作)と [https://github.com/Shougo/neobundle.vim Neobundle.vim](ネオバンドル, Shougo 氏作) である。これらのスクリプトを用いることで使いたいプラグインの名前やレポジトリを列挙するだけで、一括インストール、一括更新が可能になった。 これらのプラグイン管理用のプラグインが整備されたことにより、初期(数年前まで)の管理方法に比較すると Vim のプラグイン管理の環境は格段に向上した。 === 代表的なプラグイン === Vim.org でホストされている Vim のプラグインは、もともと小さな機能をもったスクリプトが多かった。しかしながら、2000年代後半のここ数年で Vim には高性能なで多機能なプラグインが急激に増加してきた。その背景には、コンピュータの高性能化や、Vimスクリプトのハックが進んだことなどが挙げられる。 特に、Shougo 氏作による、Unite, Vimshell, Neocomplcache などはその代表例である。 下に、汎用的で代表的なプラグインを挙げる(順不同) * '''Align''': テキストの整形 * '''Unite''': ファイル一覧、最近開いたファイル一覧、バッファ一覧、リファレンス表示など、様々なものを表示できる。自分で拡張したり、他のプラグインとの連携ができる。 * '''Neocomplcache''': Vim の補完機能を向上させる。拡張することでコードスニペットの補完ができる。 * '''Vimshell''': Vim 内でシェルをエミュレートする。 * '''Vimfiler''': フル機能の[[ファイラー]]。 * '''Zencoding''': [[HTML]] の編集に [[Zen Coding]] が使えるようになる。 * '''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 にカレンダーを搭載。日記も書くことができる。 == 機能 == === 概要 === [[Image:Screenshot-vim2.png|thumb|300px|Vim の機能:行数、Unicode、構文のハイライト、テキストの折り畳み]] [[Image:screenshot_vim7_word_completion.png|thumb|300px|Vim7 における新機能:スペルチェックとドロップダウン付きの単語補完]] [[vi]] というとコンパクトでありながら豊富なテキスト操作手段をもつエディタという印象が一般に持たれている。いっぽう Vim は多くのコマンドを追加しており、オムニ補完や構文強調、[[リアルタイムシステム|リアルタイム]]スペルチェックなどの機能も次々と導入されており、もはや [[vi]] のもつコンパクトという性質は引き継いでいない。 *設定によりオリジナルの vi とほぼ互換の操作を実現(set compatible) *マルチバッファ *任意個数ウィンドウ分割(縦、横) *[[リスト]]や[[ハッシュテーブル|辞書]]を備えた独自の[[スクリプト言語]]を実装している *スクリプト中から [[Perl]], [[Ruby]], [[Python]], [[Tcl/Tk|Tcl]], [[Scheme|MzScheme]] を呼び出せる *登録略語補完(アブリビエイション) *動的単語補完 *多段階アンドゥ *[[C言語|C]]/[[C++]], [[Java]], [[Ruby]], [[Python]] など40以上の言語に対応したオートインデント *[[ctags]] を利用したタグジャンプ *クラッシュしても、ほぼ直前のファイルを復元可能 *カーソル位置や開いているバッファ状態の保存・復元(セッション機能) *2つのファイルの差分を色分けし、同期スクロールして表示する diff モード *リモートファイル編集 *オムニ補完([[インテリセンス]]と同等の機能) === 画面分割とタブ === Vim は GNU screen と同じように画面分割して編集することができる。左右分割して2つのファイルを差分表示してみせたり、上下分割で上にヘルプ表示しながら編集を進めたりできる。 ウインドウの移動には Ctrl-w w、 Ctrl-w j[khl] を用いる。 Vim 7 からはタブ表示機能が加わり、さらに多くのファイルを同時編集可能になった。 タブの移動には gt 、gT を用いる。 この機能をさらに便利にするものとして Unite や Vimshell, quickrun などのプラグインが開発されている。 特に Unite はこれまでのバッファ管理プラグインを包括する多機能なプラグインとして注目を浴びている。 === 補完機能 === Vim には補完機能が備わっており、挿入モード中 Ctrl-n 、Ctrl-p で文中の単語をポップアップ表示、補完することができる。コマンドモード中でも補完をさせることができる。 近年では neocomplcache というプラグインを用いることで、ほぼ何でも補完対象にすることができるようになっている。 === ハイライト === Vim は非常に多くのテキストファイル、ソースコードを色分けできる。デフォルトで400以上の文法を色分けすることが可能であり、この数は他のテキストエディタと比較して群を抜いている。 特に Vi や Vim を用いて UNIX の設定ファイルを編集するケースが多いことから /etc 以下のかなりのファイルが色分け表示される。 また、正規表現を駆使することで必要に応じて拡張できる。その設定ファイルは一般的に ~/.vim/syntax 以下に収められる。 さらに色分けのカラースキームも自由に変更でき、自分の好みに応じて様々に使い分けることができる。 === ヘルプ機能 === [[Image:Vim-(logiciel)-aide.png|thumb|right|Vim のヘルプ: 検索方法 ':helpgrep evim'。下が見つかった場所で、上が選択した場所に対するヘルプテキスト]] Vim にはテキスト形式の膨大な[[文書|ドキュメント]]が存在する。また、Vim では問題の解決法を見付けるためのさまざまな機能が提供されている。構文のハイライトや Vim 独自のヘルプの文法によって、[[予約語|キーワード]]はさまざまな色で強調表示される。[[ショートカットキー|キーボードショートカット]]で[[ウェブブラウザ]]のようにキーワード間を行き来することができる。更に [[グラフィカルユーザインターフェース|GUI]] 版ではマウスを使っても移動することができる。ユーザが楽に解決法を探すための機能は他にもあり、そのうち主なものは ':helpgrep' コマンドである。これを用いれば、ユーザはヘルプ全体の中から単語を探すことができ、':cwindow' でもう一つのウィンドウ内にヒットしたものが表示され、それによってヘルプ内の一致する箇所へ移動することができる。Vim のヘルプ機能でヒットリスト内から更に単語を探すこともできる。 === プログラマ支援 === Vim は[[プログラマ]]によって開発されたプログラマのためのエディタである。Vim にはプログラマの仕事を楽にするための機能が備わっている。[[統合開発環境]]と同様、ソースファイルを編集した後 Vim から直接[[コンパイル]]できる。[[コンパイラ|コンパイル]]エラーが発生したときには、もう一つのウィンドウが表示される。[[エラーメッセージ]]に基づいて、直接他のウィンドウ内に表示されたソースファイルのエラーの出た箇所へジャンプすることができる。構文のハイライトやテキストの折り畳みもプログラマにとって役立つ機能として挙げられる(':help quickfix'参照)。 === ファイルの差分 === [[Image:Vim-(logiciel)-diff-repli.png|thumb|left|Vim を使ったファイルの比較]] しばしば行われる作業に異なるバージョンのファイルの比較がある。Vim には二つのバージョンのファイルを二つのウィンドウに並べて、差分をさまざまな色で表示する機能がある。変更された行や挿入された行は色を付けて強調され、変更のない範囲は折り畳まれて表示される。図では変更された行は赤で、挿入された行は青色で表示されている。折り畳まれた箇所は灰色になっている。UNIX では vimdiff コマンドでもこの機能を利用できる。 === スクリプト言語 === [[Image:Vim-(logiciel)-script-calendar.png|thumb|right|カレンダーのスクリプト(左)とそのソース(右)を表示した Vim]] Vim には独自の[[スクリプト言語]]が備わっており、それを用いれば[[マクロ (コンピュータ用語)|マクロ]]で対応するのが難しいような複雑な作業を自動化できる。Vim のスクリプトは -s オプションを付けて起動したり、いわゆるプラグイン[[ディレクトリ]]内に入れたりすれば読み込まれる。':source' コマンドでもスクリプトが読み込まれ実行される。Vim スクリプトの例に Vim の設定ファイルがあり、UNIX や [[Linux]] では .vimrc、Windows では _vimrc というファイル名になっていることが多い。このファイルは起動時に自動的に実行される。Vim のスクリプト言語では[[コマンドラインインタープリタ|コマンドライン]]の[[コマンド (コンピュータ)|コマンド]]が全て利用でき、':normal' コマンドで通常モードの全てのコマンドも使うことができる。この言語では数と文字列の二つの[[データ型]]が用意されている。[[ブール代数|ブール値]]は数で実現され、0は偽でそれ以外の数は真と評価される。また、重要な比較演算子や基本的な算術演算子もある。[[制御構造]]も用意され、[[if文]]や [[while文]]が使える。さらにユーザが自前の[[関数 (プログラミング)|関数]]を定義でき、100を超える定義済み関数を利用できる。作成したスクリプトは[[バグ|デバッグ]]モードでテストすることができる。 ==弱点== *1行が長いと処理が非常に遅くなる *独自のスクリプト言語の仕様が煩雑。自動実行系、ウィンドウ管理系のコマンドが貧弱 *C-1 など、マッピングできないキーが存在する(キャラクタ端末アプリケーションであるための制限) ==関連項目== {{Portal|FLOSS|}} *[[Cream]] *[[テキストエディタの一覧]] ==参考文献== *Steve Oualline『Vi IMproved‐Vim完全バイブル』[[高橋則利]]訳、[[技術評論社]]、2004年5月、ISBN 4-7741-2018-9 == 外部リンク == * [http://www.vim.org vim.org] (プロジェクトのウェブサイト) * [http://www.kaoriya.net/ KaoriYa] (日本語対応 Windows 版 Vim の配布) * [http://vim-jp.org/vimdoc-ja/ Vim 日本語ドキュメント] (vim-jp.org) * [http://www15.ocn.ne.jp/~tusr/index.html spanish passion] (設定方法、チュートリアル等) * [http://vimwiki.net/ VimWiki] {{テキストエディタ}} {{DEFAULTSORT:ひむ}} {{Link FA|de}} [[Category:テキストエディタ]] [[Category:オープンソース]] [[Category:クロスプラットフォームのソフトウェア]]