最新の日記 記事一覧 ユーザー登録 ログイン ヘルプ

think and error このページをアンテナに追加 RSSフィード

2008-11-22

Vim講座1

テキストエディタであるvimはとても扱いやすいのだが、Vimてモード概念があって入門の壁が厚いよね。ということで少しだけ書いてみる。

こんなサイトもあるわけなのだけど、これ不便。普段使わないものまで全て書いてあるからだ。

初心者にとっては、どこまで知ればミニマルなのかが知りたいというのに。




モード概念

モードは4つ。ノーマルモード、インサートモード、ビジュアルモード、コマンドモード。

ノーマルモード起動したときはこのモード。移動とかコピペとか行う。このモードに戻るには常にESC。
インサートモード挿入モード。このモードでないと文字が打てない。
ビジュアルモードいわゆる選択モード。選択範囲をコピペとかするわけだ。
コマンドモード画面下にある1行に入り込むモード。保存や終了をはじめ、様々なコマンドを打てる。

モードは主にノーマルモードとインサートモードを使う。

モードの切り替え方は以下。他にも切り替え方はあるが、省略した。

f:id:ruicc:20081116194531p:image

見ればすぐわかるがNormalじゃなくてNomalになってる。typoだ。気にすんな。それはともかく、見れば、Normalモードへの切り替えは常にESCである。それゆえ、Vimを使うものはESCキーボードの手元へ持ってこなければならない。無変換あたりに割り当てるといい。




カーソル移動(Normal mode, Visual mode)

ノーマルモード、ビジュアルモードでの移動は次の通り。

コマンドモード、インサートモードでの移動はカーソルキーのみ。

j
k
h
l

なんでjkl;じゃないかといったら、vimでは上下移動が重要であるからだ。だから一番おしやすいj,kに割り当てている。

f:id:ruicc:20081116201514p:image




インサートモードへ(Normal mode)

インサートモードへの切り替えは、まず4つ覚えるべきだ。i,I,a,Aの4つ。

iinsert modeへ
aカーソルの右からinsert modeへ
I行頭へ移動してinsert modeへ
A行末へ移動してinsert modeへ

なんとインサートモードへの切り替えと移動を兼ねているわけだ。だから左右より上下の移動のほうが重要になる。

絵で表すとこんな感じ。やはり絵的に見ないと覚えにくいからな。

f:id:ruicc:20081116201114p:image

そのうち文頭にI,文末にAが浮かんで見えること請け合いだ。




保存(Normal mode, Command line mode)

保存ができなければ意味がない。

保存、上書き、終了には:(コロン)を押してコマンドモードへ移行してから行う。

だけど、まずはコロンを含めたコマンドだと覚えたほうがいい。


:w上書き保存
:w xxx.txtxxx.txtと名前を付けて保存
:qvim終了
:wq上書き保存して終了
:q!強制終了
:w!強制保存
:wq!強制保存後、終了
ZZ上書き保存して終了(コロンはいらない, :wqと同じ)
ZQ保存せずに終了(コロンいらない, :qと同じ)

! は強制を意味する。rubyのメソッドに使われる ! と同じような意味。

恐らくまつもとゆきひろさんはvim使いなんですよたぶん違うけど。




ビジュアルモードとコピペ(Normal mode, Visual mode)

ここまでで一応エディタとして機能するが、しかしお粗末すぎる。

コピペとか削除とかできないと。そのためにはまずはビジュアルモードを理解せねば。

vビジュアル(選択)モードへ
Ctrl+v矩形選択モードへ

ビジュアルモードに入ったならば、hjkl等で移動。

移動して選択したならば、基本はコピペ

y選択範囲をコピー。yankの頭文字。
d選択範囲を削除。deleteの頭文字。
c選択範囲を削除してインサートモードへ。changeの頭文字。
pvimクリップボードの中身をペースト。pasteの頭文字。

vimに削除はない。削除と書いてあるものは、実質Cut(削除してクリップボードに保存)と同じだ。

ビジュアルモードを使わないコピペコマンドは以下。

x一文字削除
dd一行削除
yy一行コピー
p行のとき(dd,yyの後のペースト)は現在の行と次の行の間にペースト。範囲のときはカーソルの右側にペーストする。

さらに、これはコピペコマンドに限らないのだが、vimではコマンドの前に数字を打つと、その回数分だけコマンドが繰り返される。

つまり、

3dd

と打つと、そのカーソルのある行から3行が削除され、クリップボードに保存される。便利。


ジャンプ(Normal mode, Visual mode)

移動を一々hjklでやっていたら日が暮れてしまう。では効率のよい移動方法を。

まずは検索によるジャンプ

/xxxxxxを検索する
*カーソルのある場所の文字列を検索

検索するとマッチした文字列ハイライトされる。そこに飛びたいとき。

n検索にマッチした、次の文字列
N検索にマッチした、前の文字列

これだけでかなり違う。/の後には正規表現も使える。


他の主につかう移動コマンド。

w次の単語の先頭にジャンプwordの頭文字。
b前の単語の先頭にジャンプ。backward wordの頭文字多分。
^文頭にジャンプ
$文末にジャンプ
Ctrl+BPageUp。Backwardの頭文字
Ctrl+FPageDown。Forwardの頭文字
Ctrl+U半ページUp。Upの頭文字
Ctrl+D半ページDown。Downの頭文字
ggでファイルの初めにジャンプ
Gファイルの終わりにジャンプ

場所に関するジャンプまとめ。

f:id:ruicc:20081116213313p:image




置換(Normal mode)

置換くらいできないと。

:s/aaa/bbb/gカーソルのある行のaaaをbbbに置換する。
:%s/aaa/bbb/g文章全体のaaaをbbbに置換する。
(範囲選択後に):s/aaa/bbb/g選択範囲のaaaをbbbに置換する。

基本はこれ。:の後の%は文章全体を意味する。正規表現使用可能。ただ、なぜかvim正規表現は少しだけ違うので注意しなければならない。理由不明。




基本の終わり

おそらく慣れるのに1週間くらいかかると思う。

しかし慣れた後は快適だ。

Emacsは機能がたくさんあって便利だけど、テキストエディタとして見たらキーが覚えにくて使いづらい。vimは操作感が好きだね。


ついでにこれおいとく。

vimperatorとはfirefoxアドオン。vimのようにブラウジングができるようになる。

vimに慣れたらどうぞ。


あとfiler(Dyna, Afx, DF等)をvim仕様にするとこれまた便利。

トラックバック - http://d.hatena.ne.jp/ruicc/20081122/1226837833
おとなり日記