秀丸を10年使い続けた私が、MacVimと出会って困って訊いて調べて… 徒然備忘録

#秀丸な10年間からの〜
秀丸で開発し続けて10年超。12年かな。
Windowsはもちろん、Unix系だってSMB経由で秀丸を使い続けてました。
当然、色々カスタムしたり…。

そんな私がMacで開発することになって、はや6ヶ月。
最初は「Macでも秀丸をなんとか、なんとか、できやしないか…」と思ったりしました。

#MacVimとの出会い
開発チームでは、Vim派とEmacs派が半分。
1日ずつ触ってみた感じ、なんとなくVimかなと。
Unix系でviを少し触ってたしね。

もう一つVimに惹かれた大きな要因。
隣の席にはVimの秘孔をすべて知り尽くした重鎮が鎮座している。
彼の秘孔を突くスピード(ブラインドタッチ)に驚愕。
Vimで何でもやっちゃう豪腕は、まるでラオウ。
流れるキータッチは、まるでトキ。
Vimに注ぐ愛は、まるでケンシロウ。
使えないプラグインに対する言葉は、まるでジャギ。
ペアコーディングで隣で見てても、彼がMacVimでコードと向き合ってることしかわからず、いつの間にかデバッグか完了してしまっている。
要するに、そんな彼にあこがれて、MacVim伝承者になろうと決めたのでした。

#一日も早くVim使いにならなくちゃならない状況
チームでは、

+ 朝会の議事録を
+ 持ち回りで
+ 各人のエディターで
+ みんなの見ている前で
+ スピーディーに書く

が、当たり前に行われていて、これが結構なプレッシャー。

#知ってたこと
> `文字入力モード(インサートモード)`と`そうじゃないモード`があること
> `h``j``k``l`で上下左右にカーソルを動かすこと(でもカーソルを使う)
> `i``a`で`インサートモード`になること
> `x`で文字を削除すること
> `yy`が行コピーすること(当然`ヤンク`という言葉も知らない)
> `p`がペースト
> `:wq`で保存終了
> `:q!`で保存せずに強制終了
> 困ったら`ESC`連打(ノーマルモードに移行)

#行頭行末にカーソルを移動
Windowsでは`Home``End``Page Up``Page Down`を重宝してました。
> `0`:行頭へジャンプ
> `$`:行末へジャンプ
> `ctrl-u`:半画面上へ
> `ctrl-d`:半画面下へ
> `gg`:ファイル先頭へ
> `G`:ファイル末尾へ

最初、カーソル移動やコピペするのにも全く指が動かず、ストレスと肩こりが本当にひどかったことも
良い思い出です。

#オペレータとモーション
北斗Vim拳伝承者が私に最初に教えてくれたこと
「オペレータとモーションを組み合わせてバリバリ編集するのがVimmerのはじめの一
歩」
> オペレータの例

> * `c`:変更
> * `d`:削除
> * `y`:ヤンク(コピー)

なので`y``$`でカーソル位置から行末までコピーできちゃう。

#範囲選択
実はこれが一番最初に知りたくなった機能です。
秀丸(というか一般的に)は`shiftキー + カーソルキー`での範囲選択できるのに、Vimは？
> `v`

後に知るのですが、これは`ビジュアルモード`への切り替えです。
せっかくなので
> `shift-v`:ビジュアルモードで行選択
> `ctrl-v`:ビジュアルモードで矩形選択

#検索
これも一般的には`ctrl-f`のような感じでできるのに、Vimは?
> `/`:検索単語を指定して、`n`で次の単語、`N`で前の単語に移動
> `*`:カーソルがある箇所の単語を検索してくれて、ハイライトもしてくれる

でも、用が済んだらハイライトが邪魔になります。
秀丸なんかは`ESC`を押せば解決なんですが、Vimは?
> `:noh`:ハイライトが消える

#行削除
秀丸では`Ctrl + Enter`で行削除ですが、Vimでは?
> `dd`

これ、本当は削除ではなくカット。
そして、`dd`は基本コマンド。らしいです。
「Emacs使いでも知ってる」と言われてしまいました。

#空行挿入
秀丸では`Shift + Enter`
> `o`

空行挿入してすぐにインサートモードになります。
たくさん空行挿入したい時に、連打してしまう癖が抜けません。一長一短。
> `O`(大文字) :今いる行の前に行挿入します。

#「やり直し」と「やり直しのやり直し」
一般的には`Ctrl-z`や`Ctrl-y`です。
> `u`:やり直し

アンドゥのuですね。わかりやすい。
> `ctrl-r`:やり直しのやり直し

リドゥですね。
アンドゥとリドゥで、なぜctrlが付いたり付かなかったりするのか謎です。

#最後に編集した行にジャンプ
秀丸では`Ctrl-l`。
この機能はかなり重宝していました。これ無しでは生きていけない!
> `` ` ```.`
 
でも↓の方を好んで使用してます。
>  `g``;`

正確には「編集位置をさかのぼる」です。

#画面の分割
秀丸は少しカスタムすると「ウインドウ分割上下」「ウインドウ分割左右」「ウインド
ウ切り替え」ができます。私は何かのキーに割り当ててました。
> `ctrl-w``s`:ウインドウ分割上下
> `ctrl-w``v`:ウインドウ分割左右
> `ctrl-w``w`:ウインドウ切り替え(次のウインドウに移動)
> `ctrl-w``p`:ウインドウ切り替え(前のウインドウに移動)

#選択行の先頭に...
選択行の先頭にTABを入れたかったのです。
秀丸ではTABを入れたい行を選択し、`Tab`キーを押すだけ。
> `ctrl-v` ビジュアルモードの矩形選択
> `j`などカーソル移動でTABを入れたい行を選択
> `I`(大文字)で行頭挿入開始し、`Tab`キーを押す。
> `esc`を押す。選択行の先頭に一気にTABがはいる。

当然`Tab`ではなく`//`や`#`で一気にコメントアウトだって可能。

ちなみに
> `==`:今いる行のインデントを揃える
> 複数行選択 `=`:選択した行のインデントを一気に揃える
> `>>` `<<`:今いる行のインデントを出したり引っ込めたりする
> 複数行選択 `>` `<`:選択した行のインデントを出したり引っ込めたりする

TAB挿入で本当にやりたかったことは、インデント揃えなので、これでできちゃう。
(@yuuAnさん ありがとうございます。)

#行頭行末に移動してインサートモード
上で少し記述してしまいましたが…
> `I`:行頭に移動してインサートモード
> `A`:行末に移動してインサートモード

#行末までカット
ついでに
> `D`(大文字):カーソル位置から行末までカット
> `C`(大文字):カーソル位置から行末までカットしてインサートモード

#小文字<->大文字 変換
秀丸では右クリックメニューにある`TO UPPER CASE`や`lower case`
Vimを使用するようになってから、意外にこの機能を利用してたことに気づきました。
> `~`:カーソル下の文字の大/小文字を反転し、カーソルを右に進める
> ビジュアルモードで選択して`U`:大文字変換
> ビジュアルモードで選択して`u`:小文字変換

#インクリメント/デクリメント
朝会の議事録などを書いていると、27日を28日に書き換えたりします。
> 数字の上で`ctrl-a`:インクリメント
> 数字の上で`ctrl-x`:デクリメント

これを知った時、なんじゃこりゃ〜って、ちょっと感動。
#これから調べること
- grep
 - [秀丸を10年使い続けた私が、MacVimでgrepしてみた… 徒然備忘録](http://qiita.com/shingargle/items/2240198928a52858c19e )で調べてみました。