Vim - Viクローン


Table of Contents

解説 Edit

VIM - Vi IMitaion

読み方は「ヴィム」。Bram Moolenaar氏によって開発された Vi Clone です。
Viは存在は知っていても使える人は少ないようなので、使ってると周りから「おぉ」と驚かれることがあります。*1
基本的にはUNIX標準エディタとしてViが搭載されていますが、近年ではコンピュータの性能が向上していることからVimのほうが増えています。

% vim

Viとの違い Edit

あまりに違いすぎてリストするのも大変なので、ざっくりと。

  • 現在進行形で開発が続いている
  • マルチバッファに対応している
  • マルチバイト文字が扱える
  • プログラミング言語のハイライト(カラー)表示が可能かつ大量
  • マクロ,マップ, 置換が標準搭載
  • 有志によって様々な機能を持つ高機能なPluginが開発されている

    などなど。オリジナルのViと比べると異様な程に高機能です。

操作方法 Edit

基本操作 Edit

基本的な操作方法はViと同様です。*2

基本操作はviのページを参照下さい。

より詳細を知りたい場合はVim上で

:help hoge

としてください。

バッファ操作 Edit

コマンド意味
:e ファイル名指定したファイルを開きます
:bnext複数のファイルを開いている場合、次のバッファを表示します
:bprev複数のファイルを開いている場合、前のバッファを表示します
:bdel現在のバッファを閉じます
:buffers開いているバッファをリストします
:buffer nn番目のバッファを表示します(番号は:buffersで左に表示されている数字)

便利なコマンド Edit

コマンド意味
:help上記にもあるようにヘルプを表示します
:tutorialチュートリアルを表示します

簡単な設定 Edit

設定意味
:set number行番号を表示します
:set encoding=utf-8マルチバイト文字を正しく扱えます*3
:set showmode現在のモードを表示します(INSERT or VISUAL)
:set autoindentプログラミングの際に適当にインデントをしてくれます
:set smartindentプログラミングの際にカッコを閉じた時に左にインデントをしてくれます

vimの技 Edit

検索 Edit

ASCII, 2byet文字(日本語)のどちらでも検索できます。検索文字にはsedと同等の正規表現が使えます。

キー意味
/(検索文字) Enter前方検索
\(検索文字) Enter後方検索
n検索文字の次にマッチする個所を順方向に検索
N検索文字の次のマッチする個所を逆方法に検索

置換 Edit

sedと同等の正規表現による置換をサポートします。

コマンド意味
:s/[元のテキスト]/[置換後のテキスト]/カーソル上の行の最初にマッチしたテキストを置換する
:s/[元のテキスト]/[置換後のテキスト]/gカーソル上の全てのマッチしたテキストを置換する
:%s/[元のテキスト]/[置換後のテキスト]g/全てのマッチしたテキストを置換する

sedと同等、ということでグルーピングや、正規表現が使えます。
key: ValueKey = Valueに置換する場合はこんな感じになります。

:s/^\(.*\):\s*\(.*\)$/\1 = \2/

Undo, Redo Edit

キー意味
uUndo
URedo

画面分割 Edit

キー意味
C-wC-v縦に画面を分割します
C-wC-s横に画面を分割します
C-wC-w分割されている次の画面へ移動します
C-wC-h分割されている右の画面へ移動します
C-wC-j分割されている下の画面へ移動します
C-wC-k分割されている上の画面へ移動します
C-wC-l分割されている左の画面へ移動します
C-wC-q現在の画面を閉じます
C-wC-o現在の画面以外の分割されている画面を閉じます

英大文字、英小文字変換 Edit

キー意味
~カーソル上の英字の大小文字を変換します
g~wカーソル上の一単語の大小文字を変換します
g~$カーソルから行末までの英字の大小文字を変換します

カラー表示 Edit

キーワードなどに色を付けて表示します。カラー表示はshell, java, C/C++, perlなどに対応しています。
基本的にはコマンド':syntax on'で色が付きます。しかし、VIMは環境変数TERMを識別して色付けを行い、環境変数の値が'kterm'では色がつきません。文字がボールドになってしまい、むしろ見通しが悪くなります。正しく色を付けるには、環境変数を'xterm-color'と指定してVIMを起動します。
もしくは、起動時の引数に、環境変数TERMの値を指定します。以下は、引数のオプションに設定した方が簡単なのでそれをお勧めします。

オプションで指定

% vim -T xterm-color [filename]

csh

% (setenv TERM xterm-color; vim [filename] )

sh

% (TERM=xterm-color; vim [filename])

そのあと、コマンドを入力します。

:syntax on

これで正しく色が付きます。aliasやfunctionで適当に対応しましょう。

コマンド意味
:syntax onカラー表示を有効にします
:syntax offカラー表示を無効にします

タブ Edit

VIMのデフォルトのタブ数は'8'です。以下のコマンドでタブ数を変更できます。

コマンド意味
:set tabstop=NTABキーのタブ数をNに指定します
:set shiftwidth=N<<、>>のタブ数をNに指定します

タブ'\t'を半角スペース' 'にすることもできます。スペースの数はtabstop, shifttabで指定したタブ数と同じだけのスペースを取ります。

コマンド意味
:set expandtabタブ'\t'を複数の半角スペース' 'で入力します

既存のテキストファイルにスペースとタブが混在している場合、スペース(タブ)のみに統一したくなる場合があります。

コマンド意味
:%retab全ての行のタブを半角スペースに変換する

入力補完 Edit

辞書ファイルを予め用意しておき、文字入力モードで途中まで入力した後にC-xC-kと押すと文字が補完されます。変換候補が複数存在する場合はC-n、C-pで変更します。
辞書ファイルは1行1単語でリストします。辞書ファイルは以下のコマンドで指定します。

:set dictionary=[dictionary file]

Cのプリミティブ型の辞書は以下のようになります。

char
short
int
long
float
double
long
sh

と入力した所で入力モードのままC-xC-kと入力すると

short

と文字列が補完されます。

コマンド意味
:set dictionary=filefileの辞書ファイルを読み込みます
C-xC-k入力途中の文字を辞書ファイルから補完します
C-n次の補完候補を表示します
C-p前の補完候補を表示します
:help dictionary辞書機能のヘルプ表示

テキスト暗号 Edit

起動オプションに-xを指定すると、パスワードを正しく入力した者だけが編集できるファイルが生成されます。

% vim -x [filename]

プロセスが起動すると、まず最初にパスワードが問われます。二回同じフレーズを入力すると、編集画面に移行します。編集は普通に行えますが、ファイルは暗号化されて保存されます。以降、そのファイルを開くときに、最初に入力したフレーズを入力する必要があります。間違ったフレーズを入力した場合でも開くことはできますが、テキストが正しく復元されず文字化けて表示されます。

600にするほどではないけど見せたくない・・・みたいな微妙な時に使ってやってください。ファイルを644で保存した上で、特定の人にだけ見せたい場合などに有効かも知れません。

文字エンコーディング関係 Edit

以下の設定を.vimrcに追加します。

encodingを使用するとVim内部で通常使用する文字エンコーディングを設定することができます。

fileencodingsではファイルを開く際に先に指定した文字コード順(左から右)に開くのを試みて、正しく開けたエンコードで表示してくれます。

大抵のVimには付いていると思いますが+multi_byte機能が無いと使用出来ません。

set encoding=utf-8
set fileencodings=utf-8,sjis,cp932,euc-jp


Shift_JISのファイルはエンコードをeuc-jpとして開こうとするため、文字化けます。Shift_JISのファイルを開くときに、引数に以下のオプションを付けることで文字化けすることなく開くことができます。

vim -c ":e ++enc=sjis" [filename]

++encは編集するエンコードを強制するコマンドです。応用で、UTF-8のファイルを開く場合はこんな感じにします。

vim -c ":e ++enc=utf-8" [filename]

コード整形 Edit

muleなんかでもよくあるソースコードの整形機能はvimにもあったりします。そこそこ賢いので普通に使えます。ウェブのコードをコピペした場合に使ってください。

コマンド意味
==現在の行のソースコードを整形する
=G現在の行から最後の行までのソースコードを整形する
v(カーソル移動)=選択した範囲のソースコードを整形する

標準出力取り込み Edit

shellの実行結果を編集中のバッファに出力します。dateコマンドcatコマンドの出力張り付けなどに利用できます。

コマンド意味
:r ![shell command]shell commandの標準出力をバッファに張り付ける

日付の入力

:r !date

テキストファイルの入力

:r !cat ~/sample.txt

map (ショートカット) Edit

指定した一連のキー操作を特定の入力に割り当てる機能map。

コマンド意味
:map [ショートカット] [元のコマンド]元のコマンドをショートカットキーに割り当てる

Enter, Escなどの特別なキーは<?>のフォーマットで記述します。

コマンド意味
<CR>Enterキーの入力
<ESC>Escキーの入力

例えば、現在の日付を入力するコマンドを',d'に割り当てるとする場合は、以下のようになります。

:map ,d :r !date<CR>

メール Edit

取り敢えず、mnewsをメーラーとして使っている場合の話です。

.mnews_setupに以下の行を追加します。mnewsから利用するエディタが全てvimになるので、newsやmailの編集エディタvimになります。*4

edit_command: vim -T xterm-color

スペルチェック Edit

vim7よりスペルチェック機能が組み込まれています。

コマンド意味
:spellスペルチェックを開始する
:set spelllgn=en_usスペルチェックの言語を指定する

ワードカウント Edit

テキスト中に英単語が何単語存在しているか調べる。wcコマンドと同じような動作です。 バッファの下部に行数/文字数/byte数が表示されます。

コマンド意味
gC-gバッファの英単語数を調べる

.vimrc Edit

vimコマンドを設定ファイル.vimrcに記述しておくと、起動毎に毎回設定する必要がなくなります。

設定ファイル Edit

個人の設定は以下のファイルに記述します。

~/.vimrc

記述形式 Edit

1行1コマンドvimコマンドを記述します。vimコマンドはエディット中に使う":〜"の"〜"の部分です。例えば":syntax on"の場合は"syntax on"となります。また、"以降に記述したテキストはコメントとして扱われます。

" any comment
syntax on

サンプル Edit

適当にプログラミングに使えそうなサンプルです。

"
" .vimrc
"

" Japanese Words
set encoding=japan
set fileencodings=utf-8,shift_jis,latin1,default,euc-jp

" display mode, if it is insert mode
set showmode

" display line numbers on left side
set number

" auto indent
set autoindent
set smartindent

" tabs
set expandtab   " a tab to many white spaces
set tabstop=8
set shiftwidth=4

" mark up the closing brace
set showmatch

" color
" if you use, please run the vim by this command, 'vim -T xterm-color'
syntax on

written by s1200007(追記と修正).

*1 加えて、極めて不毛なEmacs vs Vi論争にVi側として参加出来ます。
*2 最初の開発目標は ViのCloneなので
*3 +multi_byteが必須になります
*4 '-T xterm-color'はオマケみたいなものなので、気に入らなかったら消してください。
xrea