melpon日記 - HaskellもC++もまともに扱えないへたれのページ

2011-01-16

[]Vim をしばらく使ってみた感想 18:52 Vim をしばらく使ってみた感想 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ を含むブックマーク

去年の 11/13 あたりからしばらく Vim を使っていたのですが、ようやく普通に使えるようになってきました。

で、短期間しか使っていませんが、Vim を使っていていくつか便利だと思ったことを書いていきます。


単語単位の移動

w, b で単語単位の移動ができます。VS での Ctrl+→, Ctrl+← と同じですね。

単語単位の削除

dw で単語単位の削除ができます。VS での Ctrl+Del と同じですね。

行単位の削除

dd で行単位の削除ができます。VS での Shift+Del と同じですね。

インクリメンタル検索

/hogehoge がインクリメンタル検索できます。VS での Ctrl+I と同じですね。

カーソルの下にある単語を検索

* で、カーソルの下にある単語を検索できます。VS で Ctrl+F を押すとカーソルの下の単語が検索欄に出るので、それとほとんど同じですね。

行の最後に入力

A で行の最後から入力を開始できます。VS で End を押すのと同じですね。

改行して入力

o で改行して入力を開始できます。VS で End, Enter と押すのと同じですね。

対になるカッコへジャンプ

% でジャンプできます。VS で Ctrl+] を押すとの同じですね。

ウインドウ分割

:sp、:vsp で分割できます。VS で言うところの(水平タブ|垂直タブ)ウインドウ作成とほとんど同じですね。

矩形選択

Ctrl+v で矩形選択できます。VS で Alt+マウスドラッグと同じですね。

確認しながら簡易置換

例えば hoge を fuga に置換したいけれども、ほんとに全部の hoge を fuga に置換していいか分からないから確認しつつ置換したいときは、

/hoge<CR>cwfuga<Esc>

で 1 つの hoge を fuga に置き換えて、あとは n を押して次の候補を見て、置換して良さそうなら . を押して置換、置換しなくて良さそうならそのまま n を押して次へとやっていきます。

n.nn.n.nnn.nn.

VS のクイック置換で『次を検索』『置換』をやるのと大体同じですね。

カーソルの下の単語を複数のファイルから検索

こんなのを用意しておきました。

nnoremap qff :vimgrep /\<<C-r>=expand("<cword>")<CR>\>/j **/*.cpp **/*.h **/*.hpp  \| cope<S-Left><S-Left><Left>

qff と押した段階では hpp の後ろにカーソルが行くので、あとは適当にファイルを追加するなり削除するなりして Enter 押せば vimgrep で検索されます。

VS で言うところの、カーソルの下で Ctrl+Shift+F 押して検索するのと同じですね。

あれ?何が便利なの?

普通にやってる分には VS と比べてそんなに便利だとは思っていないですはい。

何で使ってるの?

Apple Wireless Keyboard と iPad の RDP アプリを使って家の PC に繋いでコードを書くことが結構あるのですが、その編集を楽にするためです。

Apple Wireless Keyboard って家のキーボードと違って Home キーとか End キーとか無いので、そういうキーを多用してると、こっちで編集するのが辛いんですね。あと他の環境でも Vim はあるみたいだし、使い慣れておくと便利だろうと。

それからこれは重要なことなのですが、iPad の RDP アプリはなぜかファンクションキー, Esc キー, Ctrl キーが一切効きません。3つほど試しましたがどれも対応してないので、多分ハード的に不可能とかなんじゃないかなーと。

ということで、Vim を使う際に Esc キーとか Ctrl キーとかに頼らないようにしないといけないので、キーバインドをガリガリ変更しておきました。

" Esc に対するバインドの変更
noremap qj <Esc>
noremap! qj <Esc>

" 矩形選択
nnoremap qv <C-v>

" スクロール
nnoremap qd <C-d>
nnoremap qu <C-u>
" 1画面スクロールとか使わないし・・・
" nnoremap qf <C-f>
" nnoremap qb <C-b>

" ウインドウの移動
nnoremap qwl <C-w><C-l>
nnoremap qwk <C-w><C-k>
nnoremap qwj <C-w><C-j>
nnoremap qwh <C-w><C-h>
nnoremap qww <C-w><C-h>

" exモードでのペースト
cnoremap qr <C-r>

" redo
nnoremap qr <C-r>

マクロ潰して Ctrl の代わりにしてます。マクロとか 1 つ 2 つあれば十分ですよね?

とまあ使うキーが少ないおかげで、小さいキーボードや Ctrl の使えない状況でも楽々と組むことができて非常に便利です。これで VS のエディタと遜色無くできるのであれば十分やる価値はあります。


あと VS のインテリセンスは自分は基本使ってないというか、C++ でやってるとよく効かなくなるから頼らないようにしているので、無くてもそんな困らないです。Vim でも ctags とか使えばそれなりにできるらしいのだけれどもよく知りません。