Vim

Vim
ターミナル上で実行中のvim
開発元 ブラム・ムールナー など
最新版 9.1 - 2024年1月2日 (10か月前) (2024-01-02)[1] [±]
リポジトリ ウィキデータを編集
対応OS クロスプラットフォーム、一般的にはUNIXLinuxWindowsなど
種別 テキストエディタ
ライセンス GPL 互換のチャリティウェア
公式サイト www.vim.org ウィキデータを編集
テンプレートを表示

Vimヴィム。「ヴィアイエム」という読み方は誤り[2][3])は、vi から派生し、発展した高機能なテキストエディタである。

概要

[編集]

Vimはオランダ人のプログラマー、ブラム・ムールナーによって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, ジーヴィム)と呼び区別している。マウス操作など、X GUI (Unix, Linux) /Windows GUI (Windows) であることを生かしたGVimにしかない機能もある。

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

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

vi系 (vi, Vim, nvi) のキーボード操作法は、エディタをはじめ、各種ビューワや、ブラウザのプラグインにいたるまでその後のソフトウェアの操作方法に強い影響を与えていった。

Vim の分割スクリーン

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

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

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

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

モード切替

[編集]

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

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

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

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

その他のモード

  • 選択モード
    • 文字選択モード
    • 行選択モード
    • 矩形選択モード
  • Exモード
  • オペレータ待機モード
  • 置換モード
    • 仮想置換モード
  • (挿入モード)
    • 挿入ノーマルモード
    • 挿入ビジュアルモード
    • 挿入セレクトモード
  • (ビジュアルモード)
    • 文字ビジュアルモード
    • 行ビジュアルモード
    • 矩形ビジュアルモード

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

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

ノーマルモード

[編集]

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

キーボード操作 コマンド表現 機能
j j 下にカーソル移動
k k 上にカーソル移動
h h 左にカーソル移動
lエル l 右にカーソル移動
d w dw 単語を削除
y y yy 一行コピー
Ctrl+f 1ページ下にスクロール

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

演算子未解決モード

[編集]

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

例えば、ノーマルモードで dキー[注釈 1]を押すとこのモードに入る。続けて d キーを押した場合は一行削除、w[注釈 2]を押した場合は一単語削除、$(行末の意)を押した場合は行末までを削除、となる。d 5 d とキーボード操作すると、カーソル位置から5行分の削除となる。

ビジュアルモード

[編集]

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

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

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

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

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

セレクトモード

[編集]

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

ノーマルモードから g hg Hで移行できる。また、ビジュアルモード時に Ctrl+g で移行できる。

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

挿入ビジュアルモード

[編集]

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

例えば Ctrl+o vCtrl+o VCtrl+o Ctrl+v を実行するとこのモードに入る。

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

挿入セレクトモード

[編集]

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

例えばマウスをドラッグしたり、 Shift+ を押したときこのモードに入る。

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

挿入モード

[編集]

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

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

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

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

挿入ノーマルモード

[編集]

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

挿入モード時に、 Ctrl+o で挿入ノーマルモードに入る。

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

置換モード

[編集]

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

コマンドラインモード

[編集]

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

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

ノーマルモードから :コロン/スラッシュ?クエスチョンマークを押すことで移行できる。

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

Exモード

[編集]

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

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

ノーマルモードから Qg QExモードに移行できる。g Q の場合はコマンドライン編集や補完が使えるようになる。 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を終了させたい時は、

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

保存して終了させたい時は、:wa コマンドで全バッファ内容を保管しておく必要がある。

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

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

また、ノーマルモード時に Z Q で保存せずに終了、ノーマルモード時に Z Z で保存して終了となる。

機能

[編集]

概要

[編集]

前身であるviが機能を絞ったコンパクトな印象を一般に持たれているのと比べると、Vimはかなり巨大なアプリケーションである。 Vimはバージョンを重ねるごとに積極的に機能を追加する傾向があり、実装されている機能の種類、数は公開されているエディタの中でもトップクラスに多い。ただし設定によりviに近い操作性に戻すことも可能であり、いくつかのLinuxディストリビューションでは機能を絞ったvimをviとして配布しているものもある。

以下に示す機能の中には設定でオフにしたり、好みに合わせてカスタマイズ可能なものが多く、必ずしも説明と一致しない場合があることに注意。

テキスト編集機能

[編集]

テキストエディタとして基本的な機能は揃っている。

  • 多段階アンドゥ(元に戻す)とリドゥ(やり直す)
  • コピー(ヤンク)&ペースト
  • 豊富なカーソル移動
  • 豊富な選択方法(語選択・行選択・矩形選択・段落選択)
  • スペルチェック

オペレータと範囲指定

[編集]

オペレータとは、コピー(y: yank)、削除(d: delete)、変更(c: change)、選択(v: visual)といった操作の意味を決定づけるキーである。ただし、このキー単独では操作は完結せず、ここに範囲を指定するコマンドが続くことで、単語の削除や、カッコ内の選択、パラグラフのコピーなどの多彩なアクションが可能になる。

範囲を指定するコマンドには、移動系のキー(h j k l ^ $など)や、テキストオブジェクト(iw, i", a", a(など)がある。

Vimでは、その場で適切なオペレータと範囲指定コマンドの組み合わせを考え、実行していくことで編集を行っていく。

例えば、コマンドggVGは、分解すると「一番上に移動(gg)して行選択(V)を一番下まで(G)」となるので、「すべて選択」の意味になる。

コマンド オペレータ 範囲指定
y$ コピー(y カーソル位置から行末まで($
daw 削除(d カーソル下の単語(a w
ci" 変更(c ""で囲まれたテキスト(i "
vip 選択(v 空行で挟まれたパラグラフ全体(i p

マーク

[編集]

文章中の特定の位置にマークを付け、カーソルを移動する際の目印にすることができる。

ノーマルモード中にm+(適当なアルファベット1文字) を入力すると、現在のカーソル位置を記憶する。

ノーマルモード中に`+(先ほど指定したアルファベット1文字) を入力すると、先ほど記憶したカーソル位置にジャンプする。

レジスタ

[編集]

レジスタとは、テキストの断片を一時保存しておく場所のことで、クリップボードとほぼ同じ概念だが、複数個のスペースが用意されている点が異なる。アルファベット一文字に1スペースが割り当てられており、ノーマルモード中に"+(適当なアルファベット1文字) を入力することでレジスタにアクセスできる。例えば" a y $でレジスタaにカーソルから文末までヤンク(コピー)することができ、" a p で貼り付けられる。

マクロ

[編集]

マクロとは、操作を記録して別の場所で同じ操作を繰り返し行うときに有用な機能である。

ノーマルモード中にq+(適当なアルファベット1文字) を入力すると記録状態になり、再びqを打ち込むまでの間のタイプしたキーが保存される。

ノーマルモード中に@+(先ほど指定したアルファベット1文字) を入力すると記録された操作を再生できる。

ジャンプ

[編集]

Vimではカーソル位置が大きく動き、バッファ間でも頻繁に移動することが多い。そのため、カーソル位置の履歴を記憶している。

直前のカーソル位置に戻りたい場合ノーマルモードでCtrl+oを押す。逆に進みたい場合はCtrl+iを押す。

外部コマンドctagsでタグリストを予め作成しておけば、カーソル下の単語の意味や関数の定義を調べたい場合に、Ctrl+]を押すことで、その定義元にジャンプすることができる。これを特にタグジャンプと呼ぶ。

インデントとタブ

[編集]

ファイルタイプごとに、適切な自動改行(オートインデント)を行うことができる。Vimではデフォルトで40以上のプログラミング言語の自動改行に対応している。自動入力されるスペース(またはタブ文字)の数は任意に決めることが可能で、後述するハイライト機能によって可視化することもできる。 また、タブ文字は:expandtabでスペースに一括変換することもできる。

検索・置換・ソート

[編集]

バッファ内の特定のテキストを検索および置換することができる。検索にマッチした単語はハイライトできる。 検索単語には正規表現を用いることができ、複雑なテキストにもマッチさせることができる。

ノーマルモード中に/または?を押すと、バッファ内の単語を検索できる。

ノーマルモード中に*または#を押すと、カーソル下の単語を検索できる。

コマンドモードで :s/OLD/NEW/ を入力することで OLDをNEWに置換することができる。

コマンドモードで :sort を入力することでテキストを行単位で並べ替えることができる。

補完

[編集]
スペルチェックとドロップダウン付きの単語補完

挿入モード中にCtrl+n, Ctrl+pを押すと、文中の単語をポップアップ表示、補完することができる。 コマンドモード中でも補完はでき、機能名がうろ覚えでもサジェストしてくれる(:help wildmenu)。 プラグインを用いれば、コードスニペットや、時刻、関数名などの自由度の高い補完も可能になる。

ファイル管理

[編集]
  • 保存時に自動バックアップ
  • エディタが強制終了した場合でも、直前の場所から編集を再開できる(:help swapfile, :help viminfo)。

ユーザーインターフェイス

[編集]
行数、Unicode、構文のハイライト、テキストの折り畳み
  • 行番号やルーラー(横目盛)を表示
  • ステータスバーの表示内容変更
  • ビジュアルベル
  • カーソル行の強調
  • フォントの変更(gVimのみ)
  • アイコン付きツールバー(gVimのみ)
  • マウスの利用(gVimおよび対応した端末のみ)

強調表示(シンタックスハイライト)

[編集]

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

このシンタックスの定義ファイルは、正規表現を駆使することで必要に応じて拡張できる。 また、色分けのカラースキームも自由に変更することができ、自分の好みに応じて様々に使い分けることができる。

折り畳み(フォールディング)

[編集]

プログラマ支援機能の一つで、長い段落・関数などは折りたたんで、コンパクトに表示したほうが俯瞰しやすくなる。 いくつかの折り畳み方法があり、自分で範囲を指定して折り畳むことも可能だが、自動で判別して折り畳ませることもできる。

マルチバッファ・ウインドウ分割・タブページ

[編集]
カレンダーのスクリプト(左)とそのソース(右)を表示したVim

一つのVimウインドウの中で、複数のテキストを同時並行で編集することができる。 ウインドウを上下左右、任意の個数に分割して使い分けることができる。 これを利用して、片側にファイルツリーを表示したり、シェルを表示したり、ヘルプを表示したりすることが可能になる。

差分表示

[編集]
Vim を使ったファイルの比較

ファイルの変更点を分かりやすく比較するために、ウインドウを左右に分割して差分表示を行う機能がある。 このとき変更点は色分け・折り畳みがなされ、左右画面ともに同時スクロールする。

Quickfix

[編集]

統合開発環境と同様、ソースファイルを編集した後Vimから直接コンパイルできる。コンパイルエラーが発生したときには、Quickfixと呼ばれるもう一つのウィンドウが表示される。エラーメッセージに基づいて、直接他のウィンドウ内に表示されたソースファイルのエラーの出た箇所へジャンプすることができる(:help quickfix参照)。

キーマッピングの変更・コマンド定義

[編集]

ノーマル・挿入・ビジュアル・コマンドモードのキーマッピングを自由に変更できる。 特に長くて記憶できないが有用なキーバインドを短く定義し直すのに使われる。 独自の処理を行うコマンドも定義することができ、役に立つものはプラグインとして公開されている。

ヘルプ

[編集]
Vim のヘルプ: 検索方法 :helpgrep evim。下が見つかった場所で、上が選択した場所に対するヘルプテキスト

Vimにはテキスト形式の膨大なドキュメントが存在する。:helpgrep:helpコマンドを用いれば、ユーザはヘルプ全体の中から単語を探すことができる。このヘルプテキストはあちこちにタグ名が記載されており、Wikiのようにタグジャンプを駆使して分からない単語の説明に移動できる。

カスタマイズ

[編集]

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

Vim は、後述する独自のスクリプト言語(vimスクリプト、:help vim-script-intro)を持っており、カスタマイズ処理は主にこの言語で記述する。www.vim.org や個人のブログ上で、便利なスクリプトがプラグインとして公開されている。

Vim の初期設定は主に ~/.vimrc[注釈 3]というテキストファイルで行い、~/.vim ディレクトリ[注釈 4]に多数のプラグインスクリプトを配置することによって機能拡張を実現する。個人の設定は多種多様だがほとんどのユーザーは、~/.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 script

[編集]

Vimには独自のスクリプト言語Vim script, 言語に着目した場合VimLとも略される, 詳細はVim script)が備わっており、それを用いればマクロで対応するのが難しいような複雑な作業を自動化できる。Vimの設定ファイル類(vimrc、プラグイン、インデント定義、シンタックス定義、カラースキーム、ファイルタイプ判別)はすべてVim scriptであり、変更すれば挙動を細かくカスタマイズできる。通常はユーザーのホームディレクトリ以下の設定ファイル群でこれらの設定を上書きして利用する。Vimのコマンドモードとは、このVim scriptを一行実行しているにすぎない。:normalを使うことでノーマルモードのコマンドもVim script上で利用できる。

Vim scriptは、JavaScriptに近い言語仕様を採用しており、while文if文などの一般的な制御構文から、リストやハッシュなどのデータ構造までをサポートしているが、オブジェクト指向言語のように厳密なクラス継承の概念はない。しかしながら、モード概念と絡んでいることもあって文法が複雑であり、文法や挙動に一貫性が無い部分もある(例:.演算子など)。このため、Vim scriptでバグの少ないプラグインを書くのは慣れが必要となる。また、Vim scriptは、PythonLispLuaなどといった他のスクリプト言語と比較すると、パフォーマンスが悪いケースが多いが、これはスクリプトを行ごとに逐次実行していることによる。

コンパイル時に Vim に追加できる PerlPythonRuby などのインタフェースを使用すれば、Vim scriptの中でインラインに他言語を利用することもできる。ただし、Vimの機能にアクセスするためにはVim scriptの関数をevalするなどして間接的に呼び出すしかなく、完全な代替にはなっていない。

Vim scriptはVimのカスタマイズ性の中核を担っているが、上述した文法や性能の問題から弱点を認め、他言語への転換を図ることを目的の一つとしてNeovimがフォークしている。

Vim9 script

[編集]

Vimバージョン9.0から新しくVim9 script言語が追加された[4]。パフォーマンス向上を主な目標としており、スクリプトをコンパイルすることで10~100倍の実行速度向上が期待されている。また、文法がより一般的なプログラミング言語(JavaScriptなど)に近くなった。

旧来のVim scriptのサポートは継続される。

プラグイン

[編集]

プラグインのVim scriptは、~/.vim以下の適当な場所に配置することで動作する。Vim.orgでホストされているVimのプラグインは、もともと小さな機能をもったスクリプトが多かった。しかしながら、2000年代後半以降Vimには高性能で多機能なプラグインが急激に増加してきた。その背景には、コンピュータの高性能化や、Vim scriptのハックが進んだことなどが挙げられる。しかし、Vim.org からダウンロードしてきた第三者によるプラグインファイル(しばしば複数のファイルから成る)は、自分で解凍して複数のディレクトリに配置しなければならなかった。このため、自分の書いた設定ファイルと、第三者の書いたプラグインとが混在し、プラグインが増加するにつれて管理が複雑化することが多かった。

プラグインの管理

[編集]

Vimball による管理

[編集]

プラグイン管理の負担を軽減するために、Vimがバージョン7になると、Vimball(ヴィムボール)と呼ばれる機能が搭載されるようになった。これはプラグインをVimballという形式に圧縮して単一のファイルでプラグインを提供しようとするものである。このVimballを使うことでプラグインのインストール・アンインストールを簡便に行う事ができ、プラグインのインストール面での負担が軽減された。Vimball形式で提供されているプラグインをインストールするには、Vim.org からダウンロードしてきたファイル(拡張子 .vba)を手持ちのVimエディタで開き、:so % を実行することで自動的に展開・インストールされる。このときインストールしたプラグイン情報も同時に記録されるのでアンインストールもできる。アンインストールするには:RmVimball [プラグインの名前]を入力する(使用方法の詳細は:help 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 scriptが登場し始める。このようなスクリプトの代表例としてVundle(バンドル、gmarik作)が挙げられる。これらのスクリプトを用いることで使いたいプラグインの名前やレポジトリを列挙するだけで、コマンドひとつで一括インストール、一括更新が可能になった。これに呼応する形でVim.orgにアップロードされていたプラグインもその殆どがGitHub上に移植された[5]

これらのプラグイン管理用のプラグインが整備されたことにより、それ以前の管理方法に比較するとVimのプラグイン管理の環境は格段に向上した。

歴史

[編集]

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

日時 バージョン 変更点
1987年7月 N/A ティム・トンプソンが Atari ST 向けに vi クローン Stevie[注釈 6]を公開した。ソースコードは Usenet[6][7]に投稿された。
1988年6月 N/A トニー・アンドリュースが Stevie を改良し、UNIXOS/2に移植し、バージョン3.10としてUsenet[6][8]に投稿した。
1988年 1.0 ブラム・ムールナーが Stevie を元にして Amiga OS 向けにVim[注釈 7]を開発した。ただし非公開。
1991年11月2日 1.14[9] VimAmigaFred Fish disk #591[10]に収録された。
1992年 1.22[9] UnixMS-DOSに移植された。
1993年11月14日 2.0 このバージョンから VimVi IMproved の略称とされた。
1994年8月12日 3.0[9] Windowsをサポート。複数バッファ機能。
1996年5月29日 4.0[9][11] GUI版の公開
1998年2月19日 5.0[9][12] シンタックスハイライトとスクリプト言語(ユーザ定義関数、コマンド)のサポート
1998年4月6日 5.1 バグ修正と様々な改良
1998年4月27日 5.2 長期サポート、ファイルブラウザ、ダイアログ、ポップアップメニュー、セレクトモード、ユーザ定義関数、ユーザ定義コマンド、Tclティクルのサポートなど
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[9][13] 折りたたみ、プラグイン、多言語サポート、垂直分割ウインドウなど。
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 [14] スペルチェック、自動補完、タブページ、ハイライト機能の強化、アンドゥー機能の改良など
2007年3月12日 7.1 シンタックスファイルの追加、ランタイムファイル、バグ修正など
2008年8月9日 7.2 [15] Vimスクリプトでの浮動小数点のサポート、スクリーン描画のコードのリファクタング、シンタックスファイルの追加、など
2010年8月15日 7.3 スクリプト言語LuaPython3をサポート。 Blowfish暗号化、 制限なしアンドゥーとリドゥー
2013年8月10日 7.4 新しい高速な正規表現エンジン
2016年9月12日 8.0 非同期IO、ジョブ管理、ラムダ演算とクロージャ、標準設定の強化、Windows版でのDirectWrite対応、GTK+3対応、テストフレームワークなど[16]
2018年5月18日 8.1 バグフィックス、ドキュメント更新、ターミナルウィンドウなど
2019年12月12日 8.2 ポップアップ・ウィンドウ(情報のフローティング表示が可能に)、テキストプロパティ、Language Server Protocol(LSP)対応の強化、スクリプトの機能強化など[17]
2022年6月28日 9.0 Vim9 Script言語の追加[4]

移植された環境

[編集]

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

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

Vimの派生エディタ

[編集]

Viをモデルとした派生物にはnviElvisがあり、中でも最も機能的に発展したのがVimである。そのVimをモデルとしたプロジェクトもいくつかあるが、Vimの機能群は巨大なため、全てを模倣するのは困難であることから、結局Viクローンと同程度の機能実装にとどまっている。逆にVimの機能を制限して操作の難易度を低くしたCreamという派生物もある。

Neovim

[編集]

現在、派生物の中で最も精力的に開発されているプロジェクトはNeovim (nvim)であり、Vimのリファクタリングプロジェクトであることから、基本的な部分はVimとほぼ変わらないものの、新機能の追加やもはや使われなくなった機能の削除などが行われている。GUIアーキテクチャの改善や、スクリプトの高速化、他アプリケーションへの埋め込みが容易になることが謳われている。

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

[編集]

ViおよびVimの操作体系は、数多くのソフトウェアに継承もしくはエミュレートされている。ここでは一部の例を挙げる。

他のテキストエディタにおいてもショートカットキーの薄いラッパーのような形でプラグイン化される例が多い。

また、片指で移動ができることはPDF・画像ビューワーやブラウザと相性がよい。

脚注

[編集]

注釈

[編集]
  1. ^ delete の意
  2. ^ word の意
  3. ^ ヴィムアールシー、Windows版では _vimrc
  4. ^ Windows版では vimfiles
  5. ^ : Bram Moolenaar
  6. ^ ST editor for VI enthusiasts の頭文字から命名
  7. ^ : Vi IMitation

出典

[編集]
  1. ^ news:vim online”. 2024年1月2日閲覧。
  2. ^ Vim documentation: intro - pronounce
  3. ^ Vim日本語ドキュメント intro - pronounce
  4. ^ a b Vim 9.0 : vim online”. www.vim.org. 2023年7月3日閲覧。
  5. ^ 例: vim-scripts - GitHub
  6. ^ a b トンプソン, ティム (2000年3月26日). “Stevie”. 2010年12月27日閲覧。
  7. ^ ティム・トンプソン (28 June 1987). "A mini-vi for the ST". Newsgroupcomp.sys.atari.st. [email protected]. 2010年12月27日閲覧
  8. ^ トニー・アンドリュース (6 June 1988). "v15i037: Stevie, an "aspiring" VI clone for Unix, OS/2, Amiga". Newsgroupcomp.sources.unix. Usenet: [email protected]. 2010年12月27日閲覧
  9. ^ a b c d e f Moolenaar, Bram (2002年1月15日). “Vim, an open-source text editor”. 2005年10月24日閲覧。
  10. ^ Textfiles.com
  11. ^ Official Vim Manual, Version 4 summary” (2004年3月12日). 2008年8月6日閲覧。
  12. ^ Official Vim Manual, Version 5 summary” (2004年1月17日). 2008年8月6日閲覧。
  13. ^ Official Vim Manual, Version 6 summary” (2004年3月12日). 2008年8月6日閲覧。
  14. ^ Official Vim Manual, Version 7 summary” (2006年5月10日). 2008年8月6日閲覧。
  15. ^ groups.google.com
  16. ^ Vim 8.0 新機能解説” (2016年9月13日). 2018年4月13日閲覧。
  17. ^ Vim 8.2 is available!”. vim.org. 2020年2月12日閲覧。
  18. ^ :help sys-file-list
    Vim Online: Downloads”. 2007年1月7日閲覧。
  19. ^ Macの「ターミナル」でコマンドライン・テキスト・エディタを使用する”. 2020年2月12日閲覧。
  20. ^ Vim Touch”. 2020年2月12日閲覧。
  21. ^ App Store - Vim”. Apple Inc.. 2012年2月5日閲覧。

参考文献

[編集]

関連項目

[編集]

外部リンク

[編集]