みなさん、Vim は使ってますか。ひとくちに Vim と言っても、多くの種類(タイプ)が存在しています。ディストリビューションごとに最適化されたもの(vim-gtk
など)や、そもそも Vim 自体の機能が制限されたもの(vim-tiny
など)などが存在しています。しかし、環境に依存しない Vim 自体の種類(タイプ)として基本的に以下の5つに大別できます。
- tiny
- small
- normal
- big
- huge
です。以上の5つは Vim の機能が制約された順(昇順;英語通り一番上が一番小さい)に並んでいます。それぞれの Vim についてどの機能が解放されているかはここにて記述されています。もしくは、Vim のヘルプコマンドでも確認できるので、:h[elp] ve[rsion]
を実行してください。また、比較的目にする Vim の中に、vim.basic
と vim.full
というものがありますが、これらについても後述します(これらは基本的な Vim ファミリーとしてはカウントしない。同様に vim-enhanced
や vim-common
も同様)
あなたの Vim はどのタイプ?
$ vim --version | grep -e Huge -e Small -e Normal
Huge version without GUI. Features included (+) or not (-):
標準出力の先頭に注目です。Huge とあります。この Vim は今回、この記事で目指そうとしている Vim のタイプサイズです。これが、Huge 以外、ましてや Small であったりするのなら、あなたにとってこの記事は有意義かもしれません。また、grep
の or検索で、3タイプしか指定していませんがバージョン情報で得られるタイプは3つしかないようです(Tiny / Big はそれぞれ Small / Huge 側で吸収される?もしくはどちらとも Normal に属する?調べてもわかりませんでした…)
Vim tiny
vim-tiny とは、最小構成でビルドされた Vim です。シンタックスハイライト(:syntax on
)が有効にならなかったり、複数バッファ(:n
など)、テキストオブジェクト(ciw
)などが使用できなかったらまず間違いなく tiny な Vimがインストールされています。Ubuntu ではデフォルトで vim-tiny です。
$ uname -a
Linux ubuntu 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ which vi
/usr/bin/vi
$ ls -l /usr/bin/vi
/usr/bin/vi -> /etc/alternatives/vi
$ ls -l /etc/alternatives/vi
/etc/alternatives/vi -> /usr/bin/vim.tiny
Ubuntu ユーザはまっさきに tiny じゃない Vim をインストールするべきです!
話を戻し、vim-tiny について書き連ねます。
$ vim.tiny --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 6 2011 10:32:12)
Included patches: 1-154
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by buildd@
Small version without GUI. Features included (+) or not (-):
-arabic -autocmd -balloon_eval -browse +builtin_terms -byte_offset -cindent
-clientserver -clipboard -cmdline_compl +cmdline_hist -cmdline_info -comments
-conceal -cryptv -cscope -cursorbind -cursorshape -dialog -diff -digraphs -dnd
-ebcdic -emacs_tags -eval -ex_extra -extra_search -farsi -file_in_path
-find_in_path -float -folding -footer +fork() -gettext -hangul_input +iconv
-insert_expand +jumplist -keymap -langmap -libcall -linebreak -lispindent
-listcmds -localmap -lua -menu -mksession -modify_fname -mouse -mouse_dec
-mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse -mouse_xterm
+multi_byte -multi_lang -mzscheme -netbeans_intg -osfiletype -path_extra -perl
-persistent_undo -printer -profile -python -python3 -quickfix -reltime
-rightleft -ruby -scrollbind -signs -smartindent -sniff -startuptime
-statusline -sun_workshop -syntax -tag_binary -tag_old_static -tag_any_white
-tcl +terminfo -termresponse -textobjects -title -toolbar -user_commands
-vertsplit -virtualedit +visual -visualextra -viminfo -vreplace +wildignore
-wildmenu +windows +writebackup -X11 +xfontset -xim -xsmp -xterm_clipboard
-xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wall -g -O2 -DTINY_VIMRC -D_FORTIFY_SOURCE=1
Linking: gcc -Wl,-Bsymbolic-functions -Wl,--as-needed -o vim -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lselinux -ldl
vim-tiny の詳細情報(バージョン)を確認したところ、約120の features(機能)のうち12個しか有効になっていません。それぞれ見ていきます。
+builtin_terms 幾つかの組み込み端末 |builtin-terms| をサポート
+cmdline_hist ユーザーの打ち込んだコマンドは記録される。これらの履歴は上下矢印キーで呼び出せる
+fork() Unix のみ。fork コマンドをサポート
+iconv エンコーディングの変換をサポート。utf8<->latin1
+jumplist CTRL-O と CTRL-I コマンドで前の古い位置に移動し、
そして再び新しい位置に戻ることができます。
+multi_byte Multibyte サポート
+terminfo terminfo で termcapを代替
+visual Visual mode サポート (矩形選択モードを除く)
+wildignore ファイルパターンのリスト。パターンのどれかにマッチしたファイルは、
ワイルドカードの展開時と、ファイル/ディレクトリ名の補完時に無視される
+windows 1つ以上のウィンドウをサポート
+writebackup 'writebackup'|がデフォルトで有効
+xfontset X fontset サポート
ヴィジュアルモードはあるものの、矩形選択はできないようですね。機能が少ないということは、サイズも小さいということです。
$ du -h /usr/local/bin/vim
2.1M /usr/local/bin/vim
$ du -h /usr/bin/vim.tiny
615K /usr/bin/vim.tiny
上は huge な Vim です。全然違いますね。
tiny な vim ではほとんどのことが出来ません。:echo
でさえ E319: Sorry, the command is not abailable in this version
と言われてしまいます。つまり、あなたが手塩にかけて育ててきた vimrc
は多くが機能しません。そんな場合に以下の一文を vimrc
冒頭に書いておきましょう。
if !1 | finish | endif
if
で評価して1でなければ、スクリプトの読み込みを終了します。これは、+eval
がない時でも、if 1
だけは評価してくれるので、それを利用してます。
{expr1}が非ゼロと評価された場合に、対応する ":else" か ":endif" までの命令を実行する。(
:h if
)
こうしておくことで、tiny な Vim で設定済みの vimrc
を読み込んだ時の大量エラーを未然に防ぐ事ができます。
その他の Vim(small, normal, big, huge)
features listを載せておきます。
行頭の文字はその機能が含まれる最小構成です
略称 | タイプ |
---|---|
T | tiny |
S | small |
N | normal |
B | big |
H | huge |
m | 手動で組み込むか他の機能に依存 |
(none) | システム依存 |
例えば "N" と書いてあれば、その機能は normal、big、huge バージョンの Vim に含まれます。(
:h ve
)
vim.basic
基本的に Vim は vim.basic
のソフトリンクになっている、もしくは完全な複製になっています。つまり、sudo apt-get install vim
の vim
は vim.basic
を指しています。
$ diff -s <(vim --version) <(vim.basic --version)
Files /dev/fd/63 and /dev/fd/62 are identical
表示されるバージョン情報が一致しています。つまり、機能などが同じということです。md5 チェックサムを確認してみましょう。
$ md5sum /usr/bin/vim
846a03055b1ca58efd3a49313f44b665 /usr/bin/vim
$ md5sum /usr/bin/vim.basic
846a03055b1ca58efd3a49313f44b665 /usr/bin/vim.basic
同一ですね。ls -l
で詳細を辿って行くと、/usr/bin/vim -> /etc/alternatives/vim -> /usr/bin/vim.basic
であることでわかります。つまり、一般的な Vim = vim.basic
です。
vim.full
以前、パッケージリストの中にあった vim.full
は今は存在していません。しかし、手動で Vim 関連パッケージをインストールすることで full な Vim にすることができます。
$ apt-cache search vim | grep vim-
jvim-canna - Japanized VIM (Canna version)
jvim-doc - Documentation for jvim (Japanized VIM)
vim-addon-manager - manager of addons for the Vim editor
vim-gtk - Vi IMproved - enhanced vi editor - with GTK2 GUI
vim-latexsuite - view, edit and compile LaTeX documents from within Vim
vim-nox - Vi IMproved - enhanced vi editor
vim-scripts - plugins for vim, adding bells and whistles
vim-syntax-gtk - Syntax files to highlight GTK+ keywords in vim
vim-vimoutliner - script for building an outline editor on top of Vim
vim-common - Vi IMproved - Common files
vim-dbg - Vi IMproved - enhanced vi editor (debugging symbols)
vim-doc - Vi IMproved - HTML documentation
vim-gnome - Vi IMproved - enhanced vi editor - with GNOME2 GUI
vim-gui-common - Vi IMproved - Common GUI files
vim-runtime - Vi IMproved - Runtime files
vim-tiny - Vi IMproved - enhanced vi editor - compact version
vim-rails - plugins for vim to allow easier editing of Rails Applications
GUI
$ sudo apt-get install vim-gnome
without GUI
$ sudo apt-get install vim-nox
GUI を必要とするか否かでインストールしなければならない Vim も変わるということです。
結局どうすればいいのか
とりあえず、huge な Vim さえインストールできればいいんです。つまり、ソースからビルドしましょう。
Vim をソースからビルドする
[手順]
- 公式サイトから Raw vim をダウンロードし、パッチを当てる
- パッチ適応済みのリポジトリからダウンロード
どちらかの方法で Vim のソースコードを準備できればよいです。今回は後者で行きます。前者は非常に面倒です。何事も簡潔な方がいいので後者を採用します。どうしても前者がいいという方は、以下のサイトを参考にしてみてください。
現在(2014/7/15)の最新バージョンは7.4α版です。
Mercurial 利用
$ sudo apt-get install mercurial
$ hg clone https://vim.googlecode.com/hg/ vim74
Mercurialで Vim を引っ張ってくる方法がデファクトスタンダートとなりつつあるようです。カレントディレクトリにダウンロードされます。
Git 利用
vim-jp が非公式で Git にリポジトリを複製しているので、Git からでもソースコードを取得できます。
$ sudo apt-get install git
$ git clone https://github.com/vim-jp/vim.git vim74
また今回、Mercurial と Git があがりましたが、以下の文献も参照されたし。
事前準備をする
gcc
や make
などのツールがインストールされていなければしてください。ほぼ多くの環境ではすでにされていると思いますが。
$ sudo apt-get install build-essential gettext
ncurses を用意する
ncurses は、端末に依存しない形式でテキストユーザインタフェース(TUI)を作成するための API を提供するライブラリ。画面切り替えを最適化し、リモートシェルで使ってもレイテンシを最小に抑えるようになっている。(ncurses - Wikipedia)
Vim のビルドに必須です。
$ sudo apt-get install libncurses5-dev
各種スクリプト言語のインターフェースを有効化するための準備
スクリプト言語 | コマンド |
---|---|
Python | $ sudo apt-get install python-dev python3-dev |
Ruby | $ sudo apt-get install ruby-dev ruby-devel |
Perl | $ sudo apt-get install libperl-dev |
Lua | $ sudo apt-get install luajit lua5.2 liblua5.2-dev |
Tcl | $ sudo apt-get install tcl-dev |
Scheme | $ sudo apt-get install plt-scheme |
GVim のインターフェースを有効化するための準備
必要ならどうぞ
$ sudo apt-get install xorg-dev libgtk2.0-dev
ビルドします!
さきほどダウンロードしたディレクトリへ。
$ cd vim74
いつもの ./confugure && make && sudo make install
なのですが、./configure
に引数を指定します。
$ ./configure \
--prefix=$HOME/local \
--with-features=huge \
--enable-multibyte \
--enable-rubyinterp \
--enable-pythoninterp \
--enable-perlinterp \
--enable-fontset
結論から言うと上記のようにしました。見やすさから改行を入れていますが、以下にワンライナーも載せておきます。コピペの際に…
$ ./configure --prefix=$HOME/local --with-features=huge --enable-multibyte --enable-rubyinterp --enable-pythoninterp --enable-perlinterp --enable-fontset
ここで引数の説明です。
--prefix=PATH
でインストール先のパスを設定します- デフォルトでは
/usr/local/
- このディレクトリ以下に
bin/
やman/
ができます
- デフォルトでは
--with-features
で Vim の大まかな機能を設定します- ここで指定できるのは今までで説明してきた、tiny、small、normal、big、huge です
- デフォルトでは normal。何もなければ huge が安泰
- どの type で何が有効になるかはここを参照
--enable-FEATURE
で「機能」が有効化します--disable-FEATURE
で「機能」が無効化します--with-PACKAGE
で「パッケージ」が有効化します--without-PACKAGE
で「パッケージ」が無効化します- FEATURE や PACKAGE の一覧は
./configure --help
で見れます。
最後に make
してエラーがなければビルド完了します。
$ make && sudo make install
これでOKです。
$ $HOME/local/vim --version | grep Huge
Huge version without GUI. Features included (+) or not (-):
結論
長々と書いてきたため、何を言いたかったのか伝わりにくいので以下に箇条書します。
- Vim にはいっぱい種類がある
- いろんなサイズの Vim がある
- vim-tiny は一番小さい。Ubuntu ではデフォ
- とりあえず、Huge な Vim であれば問題ない
- Huge な Vim を入れよう
Huge な Vim を入れよう!
Huge な Vim を入れよう!
課題
- vim-enhanced
- vim-common
- 上記2つについて言及
- これらはあくまでもパッケージ名である。Vim 自体のタイプではない
参考文献