2008-11-22
Vim講座1
テキストエディタであるvimはとても扱いやすいのだが、Vimてモード概念があって入門の壁が厚いよね。ということで少しだけ書いてみる。
こんなサイトもあるわけなのだけど、これ不便。普段使わないものまで全て書いてあるからだ。
初心者にとっては、どこまで知ればミニマルなのかが知りたいというのに。
モード概念
モードは4つ。ノーマルモード、インサートモード、ビジュアルモード、コマンドモード。
| ノーマルモード | 起動したときはこのモード。移動とかコピペとか行う。このモードに戻るには常にESC。 |
| インサートモード | 挿入モード。このモードでないと文字が打てない。 |
| ビジュアルモード | いわゆる選択モード。選択範囲をコピペとかするわけだ。 |
| コマンドモード | 画面下にある1行に入り込むモード。保存や終了をはじめ、様々なコマンドを打てる。 |
モードは主にノーマルモードとインサートモードを使う。
モードの切り替え方は以下。他にも切り替え方はあるが、省略した。
見ればすぐわかるがNormalじゃなくてNomalになってる。typoだ。気にすんな。それはともかく、見れば、Normalモードへの切り替えは常にESCである。それゆえ、Vimを使うものはESCをキーボードの手元へ持ってこなければならない。無変換あたりに割り当てるといい。
カーソル移動(Normal mode, Visual mode)
ノーマルモード、ビジュアルモードでの移動は次の通り。
コマンドモード、インサートモードでの移動はカーソルキーのみ。
| j | 下 |
| k | 上 |
| h | 左 |
| l | 右 |
なんでjkl;じゃないかといったら、vimでは上下移動が重要であるからだ。だから一番おしやすいj,kに割り当てている。
インサートモードへ(Normal mode)
インサートモードへの切り替えは、まず4つ覚えるべきだ。i,I,a,Aの4つ。
| i | insert modeへ |
| a | カーソルの右からinsert modeへ |
| I | 行頭へ移動してinsert modeへ |
| A | 行末へ移動してinsert modeへ |
なんとインサートモードへの切り替えと移動を兼ねているわけだ。だから左右より上下の移動のほうが重要になる。
絵で表すとこんな感じ。やはり絵的に見ないと覚えにくいからな。
そのうち文頭にI,文末にAが浮かんで見えること請け合いだ。
保存(Normal mode, Command line mode)
保存ができなければ意味がない。
保存、上書き、終了には:(コロン)を押してコマンドモードへ移行してから行う。
だけど、まずはコロンを含めたコマンドだと覚えたほうがいい。
| :w | 上書き保存 |
| :w xxx.txt | xxx.txtと名前を付けて保存 |
| :q | vim終了 |
| :wq | 上書き保存して終了 |
| :q! | 強制終了 |
| :w! | 強制保存 |
| :wq! | 強制保存後、終了 |
| ZZ | 上書き保存して終了(コロンはいらない, :wqと同じ) |
| ZQ | 保存せずに終了(コロンいらない, :qと同じ) |
! は強制を意味する。rubyのメソッドに使われる ! と同じような意味。
恐らくまつもとゆきひろさんはvim使いなんですよたぶん違うけど。
ビジュアルモードとコピペ(Normal mode, Visual mode)
ここまでで一応エディタとして機能するが、しかしお粗末すぎる。
コピペとか削除とかできないと。そのためにはまずはビジュアルモードを理解せねば。
| v | ビジュアル(選択)モードへ |
| Ctrl+v | 矩形選択モードへ |
ビジュアルモードに入ったならば、hjkl等で移動。
移動して選択したならば、基本はコピペ。
| y | 選択範囲をコピー。yankの頭文字。 |
| d | 選択範囲を削除。deleteの頭文字。 |
| c | 選択範囲を削除してインサートモードへ。changeの頭文字。 |
| p | vimのクリップボードの中身をペースト。pasteの頭文字。 |
vimに削除はない。削除と書いてあるものは、実質Cut(削除してクリップボードに保存)と同じだ。
ビジュアルモードを使わないコピペコマンドは以下。
| x | 一文字削除 |
| dd | 一行削除 |
| yy | 一行コピー |
| p | 行のとき(dd,yyの後のペースト)は現在の行と次の行の間にペースト。範囲のときはカーソルの右側にペーストする。 |
さらに、これはコピペコマンドに限らないのだが、vimではコマンドの前に数字を打つと、その回数分だけコマンドが繰り返される。
つまり、
3dd
と打つと、そのカーソルのある行から3行が削除され、クリップボードに保存される。便利。
ジャンプ(Normal mode, Visual mode)
移動を一々hjklでやっていたら日が暮れてしまう。では効率のよい移動方法を。
まずは検索によるジャンプ。
| /xxx | xxxを検索する |
| * | カーソルのある場所の文字列を検索 |
検索するとマッチした文字列がハイライトされる。そこに飛びたいとき。
| n | 検索にマッチした、次の文字列へ |
| N | 検索にマッチした、前の文字列へ |
これだけでかなり違う。/の後には正規表現も使える。
他の主につかう移動コマンド。
| w | 次の単語の先頭にジャンプ。wordの頭文字。 |
| b | 前の単語の先頭にジャンプ。backward wordの頭文字多分。 |
| ^ | 文頭にジャンプ |
| $ | 文末にジャンプ |
| Ctrl+B | PageUp。Backwardの頭文字 |
| Ctrl+F | PageDown。Forwardの頭文字 |
| Ctrl+U | 半ページUp。Upの頭文字 |
| Ctrl+D | 半ページDown。Downの頭文字 |
| gg | でファイルの初めにジャンプ |
| G | ファイルの終わりにジャンプ |
場所に関するジャンプまとめ。
置換(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仕様にするとこれまた便利。
- 2008-11-17 uneasy の日記 3/7 42%
- 2008-11-16 Yet Another Ruby Beginner 3/42 7%