Vim初心者に捧ぐ実践的入門

# vimライトユーザの俺が説明する実践vim入門編

* `対象者` : これからvimを使い始めようという人、開発者やwebデザイナ
* `期待される成果` : vimが少しでも好きになる

## vimとは何か
私の貧弱な語彙ではとても表しきれないので一言で言うと、`高機能なテキストエディタ`だ。
使うまでに幾分かの修行を必要とすると言われているほど多機能、特殊な動作をする。
そんなツンツンのvimを使っているとそのうちデレてきて、私たちはvimからひと時も離れたくなくなるだろう。

## 何はともあれインストール

なるべく簡単に用意できる方法を選んでいます。
自前でソースコードからビルドするよっていう方は`mercurial`を使って世代管理するといいかと思います。
コマンド内の`> と $`は入力不要です

* Windows

[香り屋 KaoriYa](http://www.kaoriya.net/software/vim/)からダウンロードして使うのが吉。
`Windows+r`を押してファイル名を指定して実行から`cmd`と打ち込みEnter→コマンドプロンプトが起動されます。
フォルダを`C:\App`フォルダに解凍したのであれば以下のようにPATHを追加します。

```bat
> setx PATH "%PATH%";C:\App\vim74-kaoriya-win32
```

* Mac

Homebrewを使います。
Homebewのインストールはここを参考にして[パッケージ管理システム Homebrew](http://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc)
`Ctrl+Space`を押して`terminal`と入力してEnter→Terminal.appが起動されます。

```bash
$ brew update
$ brew install lua
$ brew install macvim --devel --with-lua
$ echo $PATH #で/usr/local/binが無い場合
$ export PATH="/usr/local/bin:$PATH"
```

brew update で私が作業した時に出たxcodeのライセンス同意しろよってエラー

```bash
$ brew update
Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
    xcodebuild -license
$ sudo xcodebuild -license #文章が表示されるので agree と入力してEnter
```

* Debian,Ubuntu

```sh
$ sudo aptitudo vim
```

## 使ってみよう

```sh
$ vim ~/.vimrc
```

vimにはモードという概念があります。
通常時のノーマルモードと入力時のインサートモードです。
どっちのモードか分からなくなったら即`esc`キーを入力してノーマルモードに戻りましょう。
vimではインサートモード中は普通カーソル移動しません。
入力漏れなどを発見した場合はノーマルモードに戻ってカーソルを移動しましょう。
早速使っていきます。最初は入力速度がべらぼうに落ちますが我慢します。

以下に簡単な入力操作の簡易表を用意しました。

操作|vim
---+---
↑|k
↓|j
←|h
→|l
一文字削除|x
インサートモードへ|i
次行を新規行として挿入してインサートモードへ|o
現在行に新しい行を追加してインサートモードへ|O
ノーマルモードへ|(インサートモードで)esc

最初は上記のカーソル移動を見ながらでもいいので打ってみてください。

```vim:.vimrc
filetype plugin indent on

syntax on

set nowrap

set hlsearch
set ignorecase
set smartcase

set autoindent

set ruler
set number
set list
set wildmenu
set showcmd

set shiftwidth=4
set softtabstop=4
set expandtab
set tabstop=4
set smarttab

set clipboard=unnamed
```

最後にノーマルモードで`:w`と入力してください。
これは保存です。同じく`:q`でvimでの編集を終了します。
以下に似た操作を列挙しておきます。

操作|vim
---+---
上書き保存|:w
名前をつけて保存|:w ファイル名
編集終了|:q
保存して終了|:wq または :x
ファイルを開く|:e ファイル名

ただしvimでは上書き保存していない編集中のファイルを閉じようとすると保存してませんぜって言われます。
編集をしたけどやっぱり保存しないといった場合は`:q!`のように最後に`!`を付けることによって強制的に上述した表の操作を行なうことが出来ます。

ちなみに上で保存したファイルはvimの設定ファイルです。
自分なりにこれは必須だと思うものをあげました。
設定した内容については次回投稿する記事で取り扱う予定です。

## でもって何が便利なのか

今のところ普通のエディタやIDE(eclipseやvisual stusioなどの統合開発環境)に比べて使いづらい印象をウケていると思います。
今のところはそれでいいと思います。

こっからvimの操作での強みであるモーション(移動)とオペレータ(操作)について説明します。
今度は移動のチートシートです。移動はノーマルモードで行ないます。
ここから登場する`C-`は`Control`と同時押しで、２文字続いているものは続けて打ってください。

vim|意味
---+---
w|次の単語の先頭へ
e|単語の最後へ
b|前の単語の先頭へ
0|行頭へ
$|行末へ
gg|ファイルの先頭へ
G|ファイルの最終行へ
%|マッチする文字へ移動(対応する[]や()への移動)
C-f|次のページへ
C-b|前のページへ

まぁこんな感じでしょうか。

続いて操作です。

vim|意味
---+---
y|ヤンク(コピー)
Y|行をヤンク
p|ペースト
P|現在位置にペースト
x|カーソル下の一文字を削除
d|削除
D|行内のカーソル以降を削除
dd|行を削除
u|元に戻す
C-R|操作を進める
r|変更(一文字)
R|変更(入力したもの全部)
c|一文字消してインサートモードへ
C|行内のカーソル以降を削除してインサートモードへ
A|行末に移動してインサートモードへ
a|カーソルの一つ右からインサートモードへ
I|行の始まり(文字の開始位置)からインサートモードへ
>|右へインデント
<|左へインデント
gu|小文字へ
gU|大文字へ
.|事前の操作を繰り返す

移動も操作も他にもいっぱいあるけど私が良く使うのはこんなところです。

では実際に操作してみましょう。
テストデータを用意したのでコピーしてvimでペーストしてください。

```vim:test_data
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim
vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim vim

[indent hoge [foo hoge] hoge]
(indent hoge (foo hoge) hoge)
[indent hoge [foo hoge] hoge]
(indent hoge (foo hoge) hoge)
[indent hoge [foo hoge] hoge]
(indent hoge (foo hoge) hoge)
```

少し気持ち悪いですが気にしないでください。洗脳じゃないです。
まずは`w`,`e`,`b`などで移動を試してください。
ついでに[]()で`%`を押して対応する括弧に移動することを確認してください。
チートシートにありませんでしたが`f[アルファベット]`で行内の[アルファベット]の部分に移動します。
`/[word]`で検索を行なえます。`/vim`と打ってください。
`n`,`N`でそれぞれ次と前の検索へ移動することができます。

操作は移動と組み合わせて使うことができます。
`dw`で次の単語の先頭まで削除が行なえます。
更に操作やモーションは回数指定が可能です。
`10dd`では10行削除可能です。

もう一つ強力な機能としてテキストオブジェクトというものがあります。
例えば操作+`iw`で単語に対して操作を行ないます。
`diw`ではカーソルの位置に関係なく単語を消せます。
以下によく使いそうなテキストオブジェクトのチートシートを示します。

vim|意味
---+---
iw|単語(以降iの部分はaでも代用可能です)
iW|単語(空白含む)
is|文
it|タグ
i]|括弧("",'',(),<>,{})なども対応可能です)


テストデータの(indentあたりで`yi)`とすると括弧内をヤンクできます。
どっかで`p`でペーストしてみてください。
`20i`で`vim `と入力した後にescでノーマルモードに戻るとこの気持ち悪いテストデータの作り方が...。
最後に`dis`とするとすごいことになるのでやってみて。

## 最後に
vimrcと追加プラグインによってvimはIDEに匹敵する、あるいはそれ以上の使い心地になる可能性を秘めています。
この記事の内容はかなり搔い摘んだ話です。
更にvimの基礎を深めたい方はターミナルで`vimtutor`と入力してvimのチュートリアルレッスンを開始できます。
テキストを読み進めながらいろいろやってみてください。

次回以降は今回扱えなかったビジュアルモードやコマンド、vimrc、プラグインの話に入っていく予定です。

[vim実践的入門初級編](http://qiita.com/himinato/items/d7fdbee03c4857b1ce20)