ターミナル上でvimのスクロール速度が遅い

ターミナル上でvimを利用していると、カーソルの移動やスクロールが大変遅くなることがあって困ってる。

ターミナルのウインドウサイズを大きくしたり、画面分割したりして、ターミナルの画面書き換えの量や複雑さが高くなると、遅くなるようだ。KeyRemap4MacBookでキーリピートは早くしてあるし、vimではない単純な画面では表示の遅さは感じないので、vimをどうにかする必要があるとういことになった。

僕のMacの環境では Terminal.app が一番悪くて、カーソル移動するだけでも、かなり遅く感じる。iTerm2ではスクロールが発生しないカーソルの移動は問題ないが、スクロールが発生するカーソル移動を行うと遅く感じる。

調べてみると、困っている人は他にもいて、vimの設定などをいろいろ工夫している。

一番初めのURLの回答(2008年の話なのでちょっと古い)で、「描画遅かったらgvim使え。」と言ってる人がいて、まぁ、おっしゃるとおりという感じはするので、ものはためしに、MacVimを利用してみた。

たしかにMacVimはスクロールがはやい。ウインドウサイズや画面の分割数を増やしてもMacVimではあまり遅くならない。(スクロールの様子を動画にしてみた。エントリの最後にある。) vimはターミナルから直接使えるのが良いところの1つだと思うのだけど、最近はスクロールのスピードがずっと気になっていたので、しばらくはMacVimを使って見ようと思う。

ターミナルやvimの設定しだいでなんとかなる気もするし、vimのスクロール速度について何か工夫があれば教えて欲しいです!

参考: Terminal.appとMacVimでのスクロールの様子

Termina.app/MacVimのそれぞれで、画面を2つに分割し、jキーを押したままにして50行程度スクロールしてみた。.vimrcはこちら

Terminal.appでスクロール


MacVimでスクロール


参考: 利用した環境

  • vim 7.4b.11 BETA / MacVim 20130713 (Vim 7.4a.9) /.vimrc
  • Terminal.app 2.3 (309)
  • iTerm2 build 1.0.0.20130624

vim+manpageviewで補完を便利に

manをvimの中でみるためのプラグイン,manpageviewを導入してみた.

インストール

インストールがちょっと変わってて*1,上のサイトからmanpageview.vba.gzをダウンロードしてインストールしてから以下のようなコマンドを実行する.

$ vim manpageview.vba.gz
# vim内で
:source %
:q

使い方

これでvim内で,:Man commandが使えるようになる.他にもいくつかキーバインドがあって,まとめると,

  • :Man 水平方向に画面を分割してmanを表示
  • :VMan 垂直方向に画面を分割してmanを表示
  • :OMan 画面を分割せずにmanを表示
  • :RMan すでに開いているman用のバッファを再利用して表示

がつかえる.さらに,単語上でK押すことでその単語のmanがひけるmapも追加される.very便利!

このプラグイン,結構かしこくて,Perlのコードを使っているときは自動的にmanのかわりにperldocを使ってくれたりする.

利点

で,なんでわざわざvimの上でmanを開くかというと,vimの補完がmanの中の単語を使ってくれるのが便利だから. メソッド名が長くて覚えにくいライブラリを:Manで開いておけば,補完が効くようになってかなりいいかんじデス.

たとえば,Class::MOP::Classのmanを表示していれば,Class::MOPプログラミングも楽ちん.

Class::MOP::Classのmanの中からmake_imutableとかの長いメソッド名を探してくれる.

というのも…

前回Kansai.pmで,

「Emacsだとmanが内部で開けて,補完にも使えるからちょー便利!」

とかいうはなしが上がって,そんなvimに無いはずがないと探していたらやっぱり見つかったのでした.vimかわいいよvim.

*1:vim界では常識?

vimにおける入力ストレスを激減する最善の方法

タイトルは釣りです.

vimを使っているとESC,つまりCtrl-[を連打しまくるわけですが,疲れていたり焦っていたりするとまちがえてCtrl-@を連打してしまいがちです.*1

Ctrl-@はそれはひどいコマンドに割り当てられていて,:help Ctrl-@によると,以下のように説明されています.

                                                *i_CTRL-@*
CTRL-@          Insert previously inserted text and stop insert.  {Vi: only
                when typed as first char, only up to 128 chars}

「直前に入力したテキストを挿入したあと,挿入モードから抜ける」

まったく意図しない入力が発生するので,うちは結構混乱してしまいます><

ここは潔く,.vimrcに

" Ctrl-@がうざいのでCtrl-[にする
imap <C-@> <C-[>

とかけばOKです.体感ストレスが結構--された気がします.

Macの場合

ちなみに,Macでことえりを使っている場合はさらに罠があるようです.ことえりのキーバインドでCtrl-@を押すと,日本語入力がONになってしまいます.

うちはATOKを使っているのでまだ調べていないのですが,このことえりのキーバインドの変更方法をご存知のかたがいればぜひおしえてください.

*1:JIS配列の場合

今日覚えたvimのキーバインド

ペースト時にインデントしない方法

いつの間にか :a でできなくなってたのだけど,:a! とすればインデントしないでペーストできるらしい.:help によると!をつけると,ペーストの瞬間だけautoindentをトグルするらしい

段落の選択

vipとvap.どちらも現在カーソルがいる段落を選択してくれる.vapにすると前後の空白も含むようになる.ほかにもvisとvasやviwとvawがあるらしい.くわしくは,:help visual-operators で.