Vim

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

Vim(ヴィム)は、Linux界隈での定番テキストエディタの一角。
オープンソースかつクロスプラットフォームであり、UNIXWindowsmacOSなどへも移植されている。

歴史[編集]

前身:vi
まず、BSD創立者のビル・ジョイさんがテキストエディタ「vi」を作成。現在からみれば独特の操作方法だが(当時はそうせざるを得ないコンピューター環境だった)、慣れれば入力編集が早いとのことで一定のファンを得た。
現在から見ればカスタマイズできない、Vim Scriptなんてものはない等、シンプルでコンパクトなエディタ。現在でも多数のLinuxディストリビューションが、後述のVimの機能をあえて削ぎ落としたものをviとして標準添付している。
ルーター機器に組み込まれているLinuxベースのカスタムOSなど、最小限のUNIX・Linux環境でもviが利用できる場合があり、サーバー管理者などのITエンジニアであれば最低限のvi操作を覚えておいて損はない。
そしてVimへ
独特の操作方法ながら、慣れれば入力編集が早いとのことで一定のファンを得たviエディタ。真似して作成されたviクローンも複数誕生。
オランダのプログラマー、ブラム・ムールナーさんもクローン作者の1人。ある日新しく買ったパソコンに対応したviがまだ存在しなかったのを機に、他機種のviクローンを元にしてVimを作成。
早くからオープンソースとしてソースコードを公開し、世界中から改善点を募っており、Windowsへの移植など大きく発展を遂げ、今やLinux系に限らない一大勢力を築き上げている。

特徴[編集]

(以下に記述されているVimの内容は、viにおいても出来ること・viでは出来ないことが混在している。viはほとんどカスタマイズできないし、Vim Scriptに相当する機能は存在しない)
モードの概念
Vimでは起動直後の、コマンドを受け付けている状態(文字入力モードではない状態)を「ノーマルモード」と呼ぶ。カーソル移動、文字列検索、コピー、貼り付けなど「文字入力以外」の編集操作のほとんどはノーマルモードで行う。
他エディタは例えば「Ctrl+Cでコピー、Ctrl+Vで貼り付け」だが、Vimでは「ノーマルモードでyコマンドでヤンク、ノーマルモードで「p(paste)」コマンドで貼り付け」となる。
(Vimでは文字列コピーを「ヤンク(yank:引っ張る)」と呼んでいる。
考え方としては、他エディタで言う「Ctrlを押しながら〇〇」をVimにおいては「ノーマルモードで〇〇」と置き換える感じ。他エディタは文字入力モードがメインだが、Vimはノーマルモードこそがメインという考え)
Vimはノーマルモードを基本とする複数の「モードを持つエディタ」とよく言われる。
  • ノーマルモード:編集モード。カーソル移動・文字列選択・コピー・切り取り・貼り付け等など、文字入力以外のほとんどの編集操作を行う、Vimの基本となるモード。他モード中にESCキーを押すとノーマルモードへ戻る。
  • 挿入モード:入力モード。キー入力された文字を実際に入力するモード。他エディタにとっては「本業」となるモードだが、Vimでは「数あるノーマルモードコマンドのうちの1つ」くらいに考える。「i(insert)」または「a(add)」コマンド等から遷移し、ESCで入力を確定してノーマルモードへ戻る。
  • コマンドモード:頭に「:(コロン)」がつくEXコマンドを入力するモード。ファイル読み込み・保存・特殊コマンド実行・エディタ終了など、テキスト編集を側方支援。「:」を入力するとコマンドモードへ遷移し、続けてコマンドを入力。
例)ノーマルモードで「:e(edit) 」に続けてファイルパスを入力するとファイルを開く。同じくノーマルモードで「:w(write)」と入力するとファイルを上書き保存。「:q(quit)」と入力するとVimを終了。
  • 他にも置換モード・選択モードなどいくつかあるけど、慣れないうちはあまり意識しなくてOK。操作が分からなくなったらESCを連打すればノーマルモードへ戻る。
中毒者は「今どのモードか」をほぼ意識せずに高速に遷移しながら「ピアノを奏でるように」編集を進める。
「別に他エディタでCtrlキーを押しながら作業すればいいんじゃない?」
うん、そうだね、否定はしない。実際、Vim系以外の多数のエディタはそうしている。Vimは「ホームポジションとCtrlキーを往復する」操作の代替策を提供しているとも言える。でも結局はノーマルモードに戻るためにホームポジションとESCキーを往復するんだけど。
コマンドの組み合わせ・繰り返し
Vimの編集コマンドのほとんどは英小文字1字、もしくはShiftと一緒の英大文字、または記号となっている。この小さなコマンドを複数まとめて入力したり、数字と一緒に入力したりすることができる。
  • 「l」(エル)を1回押すと「lコマンド(カーソルを1つ右へ)」を実行
  • 「10l」とコマンド入力するとカーソルが10文字分右へ移動(lコマンドを10回繰り返す)
  • 「y10l」とコマンド入力すると、カーソル位置から右へ10文字分の文字列をヤンク(yank:引っ張る)
  • 「j」キーを1回押すと「jコマンド(カーソルを1つ下へ、すなわち次の行へ)」を実行
  • 「5j」とコマンド入力するとカーソルが5文字分下(すなわち5行下)へ移動
  • 「y5j」とコマンド入力すると、カーソル位置から下へ5行分をヤンク
  • 「w」(word)1単語分右へジャンプ、「b」(back)1単語分左へジャンプ。10wと入力すると10単語分右へジャンプする。y10wと入力すると10単語分ヤンク。
  • 「a」(add)を押して挿入モード(文字入力モード)に入り「abc」と入力し、ESCで戻ると入力結果は「abc」。「2a」と入力して「abc」と入力しESCで戻ると入力結果は「abcabc」となる。
  • 数字+コマンドによる繰り返しとは別に、ノーマルモードで「.(ドット)」を入力することにより、(カーソル移動以外の)直前の編集操作を「繰り返す」ことが出来る。
例)「a」を押して挿入モードで「abc」と入力しESCで戻る。続けて「.」を押すと、直前の「a」の動作が繰り返され、「abcabc」という入力結果になる。
例)「2a」を押して挿入モードで「abc」と入力しESCで戻ると「abcabc」。続けて「.」を押すと、直前の「2a」の動作が繰り返され、「abcabcabcabc」という入力結果になる。
  • さらに「マクロ記録・再生機能」もある。ノーマルモードで「qq」と入力すると画面左下に「記録中 @q」と表示されコマンド記録開始。編集操作を行い「q」と入力すると記録終了。ノーマルモードで「@q」と入力すると、記録された編集操作が再生される。「2@q」と入力すると2回再生される。
  • 同じキーを連打するのではなく数字・ドット・マクロと組み合わせて指示することにより、打鍵数を極力減らすのがVimの考え方。慣れないうちはコマンド組み合わせが意味不明だが、コマンドひとつひとつの意味を覚え、最終的にやりたい操作を単純なコマンド組み合わせで簡潔に表現できるようになった時、編集速度が跳ね上がる瞬間が訪れる。
(ただし、コマンドの組み合わせはつまりは編集キー操作の連続であり、別にVimだけの特徴というわけではない。Emacsは数字との組み合わせによる繰り返し操作もでき、その点においてはVimに似ている)
Vim Script
Vimは各種機能を自動的に実行する「Vim Script」機能を備えている。頻繁に入力するコマンドの組み合わせをスクリプトに記述しておき、簡単な操作で呼び出せるようにしておくことで、ただでさえ速い編集速度がもはや誰にも止められなくなる。
インターネット上で有志が作成した便利なスクリプトが「Vimプラグイン」として多数公開されている。コマンドの意味を変更するプラグイン、外観を変更するスクリプトなど多種多様なプラグインがあり、極めすぎたVimはもはや統合開発環境と見分けがつかない。
ただ、従来のVim Scriptは1行1行を律儀に実行している、文法仕様に曖昧な点がある等、今となっては性能面で不利になりつつある。Vimバージョン9では従来のVim Scriptに加えて、Vim Scriptとは互換がないVim9 Scriptが登場(従来のVim Scriptの廃止予定はなく、両方利用可能)。
或いは、Vimはいくつかの別言語インタフェースも内蔵しており、Vim Scriptの中でPerlRubyPythonのコードを呼び出すことも出来るし、さもなければ外部コマンド呼び出し機能を利用して別言語のスクリプトを実行する手も。
その他
  • VimはCUI(コマンドプロンプトのような、コマンド入力のみ受け付けるコンソール画面)アプリケーションであり、それ自体はGUI(WindowsやX Window Systemのようなウインドウ操作インタフェース)を必要としない。
設定カスタマイズはテキスト形式の設定ファイル(.vimrcまたは_vimrc)に記述することで行う。
(Vimに限らず、UNIX/Linux由来のアプリは「設定画面」が存在せず、設定ファイルへ記述するアプリが多い)
  • 行番号表示、長い1行を改行して表示、色付け(シンタックスハイライト)、巨大ファイルの扱い、複数の文字コード対応、外部コマンドとの連携など、高機能テキストエディタの定番機能を一通り揃えている。
ただしLinuxに最初から入っている最小構成のVimでは最小限の機能以外ほとんどオフになっており、
  • フル機能バイナリをインストールするか、または自分でソースファイルからビルドする
  • その上で、設定ファイル(.vimrc)へ機能をオンにするよう記述
をいずれも実施する必要がある。
(例:OSのクリップボードとの連携は既定オフになっており、そのままでは他プログラムとの間のクリップボード連携が出来ない)
  • Vimの設定ファイルはとどのつまりVim Scriptファイルであり、起動時に「設定を変更するVim Script」を実行している。
  • Vim標準に存在しない、或いは標準では貧弱な機能でも、大体はVim Scriptやら外部コマンドやらで実現・強化できる。上記の通り有志作成のプラグインを導入するも良し。Vim Scriptを学んで自らプラグインを書くことで、より自分の好みに合わせた強力なエディタ環境が得られる。
(例:単語補完は最低限のものがVim標準機能に含まれているが、外部ツール連携により単語補完を実現するプラグインを導入するのが一般的)

その他[編集]

物別れになった弟:Neovim
Vimはソースコードを公開して改善点を募ってはいるものの、あくまでブラム・ムールナーさん1人が最終責任者として、世界中から寄せられた改善点を吟味し、実際に配布物へ反映するという体制が長く続いた。改善点を反映したがために余計なバグを引き起こす場合も少なくないため修正の反映には慎重にならざるを得ず、要望に対する改善が追い付かない状況も見られた。
この、あまりにも保守的な「独裁」体制に異を唱えてNeovimが分岐。複数人で役割分担、もう誰も使ってない機能を削除して見やすく整理するなど、改善点の反映の迅速化を図っている。Vim9 Scriptを編み出した本家と、Vim Scriptに加えてLua言語への対応を推し進めるNeovim。Vimの修正点をNeovimにも反映したり、Neovimの新機能をVimに逆輸入したりする試みもないわけではないものの、両者の相違点は徐々に広がりつつあり、界隈では「NeovimはVimと似た操作ができる別物エディタ」と解されている。
  • Vimは「保守」、Neovimは「革新」と解される。Neovimは新しい技術、新しい開発手法の取り込みに比較的積極的(吟味・取得選択するものの)。Vimは本当に必要と判断されるまでの道のりが結構長い。
  • Neovimは機能・内部構造の整理整頓を徹底し、その上で新機能を追加している。コア部分については本家よりパフォーマンスが良いらしいが、新機能追加によるパフォーマンス影響と相殺され、重い・軽いという話に関してはVimとほぼ変わらない。
  • Vim設定ファイルが「.vimrc」に対し、Neovim設定ファイルは「init.vim」。ただし記述内容はほとんど同じ。
  • 設定値の「デフォルト」がVimとNeovimで少々異なる。Vimでほとんどの人が有効にする機能が、Neovimでは最初から有効になっていたり。
  • Neovimは独自に別言語インタフェースとして「Lua」を採用し、Vim ScriptだけでなくLuaでスクリプトを書くこともできる。Vim Scriptを廃止する予定は全く無く両方利用可能であるものの、開発チームはLuaで書くよう推奨している。設定ファイルも「init.vim」に代えて「init.lua」で記述。
  • 実際「Vimでは動かないNeovim専用プラグイン」はそれなりに存在。Vim・Neovim両方で問題なく動作するプラグインの制作はなかなか大変。有名な両対応プラグインはメイン処理をPythonTypeScriptなど外部スクリプトで行うつくりが多い。
ライバルEmacsとの比較
同じくLinux界隈での定番テキストエディタの一角、Emacs。viからVimへ発展したのと同様に機能をもりもり詰め込まれ、強力なEmacs LISPによるスクリプトによりメールやらゲームやら割と何でもできる。人によってはEmacsはテキストエディタというよりもオペレーティングシステムであると表現される。
「viは軽く、Emacsは重い」とよく言われる。viに関してはその通りだが、現在の高機能を備えたVimに間してはEmacsと大体同じくらい重い。それでも両者ともMicrosoft OfficeOpenOffice等のOfficeスイートより十分に軽い。
冒頭のviの説明で「大多数のLinux環境にvi(機能を落としたVim)が入っている」と書いたが、フル機能Vimを使いたければ改めてインストールしなければならない点はVimもEmacsと変わらない。
マウスをほとんど使わないという設計方針はEmacsもVimも一緒。他テキストエディタの操作に慣れている人にとってはEmacs操作も十分に独特。
Emacsはとにかく「Ctrlを押しながら何々」「Meta(WindowsではAlt)を押しながら何々」を滅多やたら多用する。Vimのノーマルモード機能をCtrlやMetaで代用していると言える。ただしVimでは多用しないかというとそうでもなく、VimでもCtrlやShiftをそれなりに多用するし、ノーマルモードへ戻るためにESCキーを滅多やたら多用する。
コマンドの繰り返し・組み合わせは何もVimに限らずEmacsでも同等機能を備えている。ただしCtrlやMetaを押しながらだけど。
vi派とEmacs派に分かれて、相手の弱点をディスり、自分が愛用するエディタを持ち上げるエディタ戦争は、きのこたけのこ戦争に似た愛用者達の定番ネタとなっている。ただ最近は両者ともVisual Studio Codeの人気に押されている…。
不利な点
一般に日本語など全角文字の入力は不得意とされる。英語などの言語はスペース区切りの単語で構成されており、Vimはこの単語という単位でカーソル移動するコマンドを多用する。
例)ノーマルモードで「w(word)」:1単語分右へジャンプ、「b(back)」:1単語分左へジャンプ。10wと入力すると10単語分右へジャンプする。y10wと入力すると10単語分ヤンク。
ただし、日本語については日本人パワーユーザーの尽力のおかげか、半角文字・ひらがな・カタカナ・漢字・句読点の区切りを単位としてジャンプできるようになっている。
例)「12345あいうえおカキクケコ漢字」というテキストの先頭(「1」の位置)にカーソルがある場合、
「w」を1回押すと「あ」の位置へジャンプ、「2w」と入力すると「カ」の位置へジャンプ、「3w」と入力すると「漢」の位置へジャンプ。
ハングル文字とか中国語はどうなんだろう?やはり得意とするのはプログラミング言語や設定ファイルの記述かと。
単語ジャンプも問題だが、日本語IME(日本語入力システム)がオンのままではノーマルモードのコマンドを入力できない問題も大きい(全角文字は受け付けられず無効な入力として無視されてしまう)。挿入モード(文字入力するモード)からノーマルモードへ移る際に強制的にIMEオフにする等の回避策を適用する必要あり(下記「香り屋」版はあらかじめ回避策が組み込まれている)。
vi操作は最近のエディタ及びOS・Webブラウザ操作との剥離が大きく、vi操作を極めすぎてしまうと逆にその他のエディタ・Officeスイートやファイル操作でvi操作が出来なくて辛い(Microsoft Excelでセルに値を入力してEnterを押すはずがESCを押してしまい、入力結果を吹き飛ばすのはVim使いのお約束)。Linux系のシェル、ブラウザーやファイルビューワについてはオプションでvi操作できるようになるものもある(Vimium拡張など)。
プログラミング統合開発環境でもvi操作の需要は多いようで、vi操作を可能にするオプションが別途提供されているものがいくつかがある。VSCodeでvi操作をなるべく再現する「VSCode Vim」拡張、或いはVSCodeとNeovimを連携させる「VSCode Neovim」拡張など(VSCodeへのキー操作をNeovimへ渡し、Neovimが行った編集結果をVSCodeへ反映させることで完全なvi操作を実現。Neovim向けプラグインもほとんど動作)。当初はmacOS向けコードエディタとして誕生し、後にオープンソース化したRust製コードエディタ「Zed」はVimモードを実装。クロスプラットフォーム化を目指して作業が進められている。
こんな人にお勧め
  • 新しいことを覚えるのにそれほど抵抗がない。Vimにちょっと憧れている
一周回ってvi操作は新鮮とも言える。確かに学習の初期コストは高い。その初期を乗り越えた後に待っている超効率は、多数の中毒者達が保証している。下記外部リンクから「香り屋」版Vimをダウンロード・インストールし、チュートリアルコマンド「:Tutorial」を起動し、実際に手を動かすことをお勧め(何事もそうだけど、手を動かさないと覚えない)。
  • UNIX・Linuxサーバーエンジニア等のIT技術者
Vimはそれ自体はGUIを必要とせず、CUIでも動作する。GUI機能がトラブった等、いざという時のトラブル対応でviエディタを使う場面があるかも知れない。Vimは設定ファイルやバッチ、スクリプト、プログラムソースコードの編集を得意としている。「設定画面」は存在せず、設定変更は設定ファイルへの記述により行う。一方でそもそもテキストエディタと縁が薄いライトユーザーには敷居が高い…。
  • サーバーエンジニアほどではないけどLinux系・macOS利用の割合が多い
Linuxはvi操作が可能なアプリが比較的多い。macOSUNIXの派生ということもあり、同じくvi操作の出番がある程度ある。Windowsにもないわけではないが…。
Vimはなるべくキーボードのみで完結、マウス操作を不要とするコンセプトで設計されている。スマホのフリック操作でVimを使いこなす末期中毒者もいるらしい…逆にキーボードが苦手でマウス操作ばかりという人には残念ながら不向き。
  • カスタマイズが苦にならない
スクリプトや外部ツール連携など、無限にカスタマイズ可能。逆に言うと初期状態はほとんどの便利機能がオフになっており、カスタマイズしない素の状態はシンプルすぎて正直使いづらい。GUIでの設定画面に慣れている人にはなかなかキツイ。調べるにもテキストエディタ用語などある程度の知識が欲しい。さりとてカスタマイズしすぎるくらいなら最初からVSCodeを使えよという身も蓋も無い意見も…。
  • 総じて、PC知識がまだ浅い初心者にVimはいくら何でも無理ゲー。いくつかのテキストエディタを利用した経験のある中級者が、それまでのエディタも引き続き使いつつ、少しずつ少しずつ慣れていくのが最適。どうしてもvi操作が合わないのであれば一旦撤退して元のエディタへ戻っていくのも一興。Vimやvi操作エディタは世界規模の派閥を持ち、少なくとも数年で廃れることは考えにくい。また興味が再燃したら再挑戦すればいい。
作者:ブラム・ムールナーさん
オランダ出身のプログラマー、ブラムさん。界隈ではVim作者として有名だが、それ以外にもプログラム支援ツールを開発したり、後述の慈善活動に関連したソフトの開発に関わっていたり。Google社員だった時期もあったそうな。
プログラマー稼業と同じくらい慈善活動に情熱を傾けており、オランダの子供支援基金へ参加したり、Vim起動画面にてウガンダの子供たちへの支援を呼びかけたり。こういった「完全無償で利用可能だがチャリティーを呼びかける」ソフト(チャリティーウェア)の「元祖」と言われているとか。作者への寄付をお願いする「カンパウェア」とは意味合いが少し異なる。
慈善活動も兼ねてウガンダはじめ世界中を旅して回っていた。2018年11月、Vimの日本国内カンファレンスへの招待に応じて来日。Vimの次期機能について公演を行った。
Vimが世界的に有名になり、多くのボランティア貢献者に支えられるようになってからは、唯一の作者ではなくVim開発チームの代表者、開発の最終責任者という立ち位置へ変化(優しい終身の独裁者)。寄せられたVimの改善点は、最終的にはブラムさんが内容を確認し、ブラムさんが実装可否を判断し、ブラムさんの手だけでようやく実際に反映されるという体制。
しかしながら、良くも悪くも「独裁」は長続きしない。ふと体調を崩してからあまりにも急速に病気が進行し、2023年8月に62歳で死去。あまりにも急な訃報、かつ上記のようにVimの開発は「独裁」体制であったことから、直後のコミュニティにも少なからず混乱が見られたものの、数を絞って共同代表者を立て(日本人2名が含まれている)、これまでのブラムさんの役割を継承しつつ、代表メンバー間で話し合ってVimの方針を決定する体制へ移行。物別れになったNeovimと似たような体制になりつつあるのも何かの因果か。
モダンなエディタとはかけ離れているVimだけど、新規Vimmerを志す若人が大きく増えるかは微妙だけど、それでも世界規模の派閥を抱え、支持され続けているVim。ブラムさんがいなくなっても、世界中の中毒者達がしっかり引継ぎ、発展を続けていくだろう。

参考文献[編集]

関連項目[編集]

外部リンク[編集]