2013/02/09

端末vimでマウスを使う

本記事は Vim Advent Calendar 2012 の71日目です。70日目は VimShellだいすき(エイリアス編) | かなりすごいブログ でした。ここでは端末 vim におけるマウス操作について紹介したいと思います。

長いこと ssh 経由での作業ばかりしているので、vim とはターミナルエミュレータ越しにキーボードだけで対話するものだとばかり思っていました。昨年、ふとしたきっかけでマウスで出来る操作があることを知って大変驚いたので、いまさら感がありますがここにまとめます。

Vimでマウスを使えるようにする

ここで話題にする vim は gvim ではなく端末 vim です。そして mouse 機能が有効な状態でコンパイルされたものが必要です。パッケージで導入している場合は vim-minimal や vim-tiny だとマウス機能が利用できません。いますぐ vim-enhanced や vim-nox パッケージをインストールするか、--enable-features=huge を指定してソースからビルドしましょう。

さて、端末 vim でマウスによる操作を可能にするには、まず mouse に値を設定します。モードごとに有効・無効を指定できますが、ノーマルモード(n)、ビジュアルモード(v)、挿入モード(i)、コマンドラインモード(c)の4つをすべて有効にできる a を指定するのが手軽です。

set mouse=a

つぎに ttymouse の値を設定します。これは TERM 環境変数の値を元に設定され、多くの場合は xterm になっていると思います。最近の普通に高機能なターミナルエミュレータを使っている場合はドラッグを可能にするためにも xterm2 を指定しておくのが無難です。

set ttymouse=xterm2

Vimで出来るマウス操作

詳しくは :help mouse-using で確認いただくとして、GUI アプリケーションではごく一般的な操作ができます。

  • クリック
    • カーソルの移動
    • ウィンドウの選択
    • タブの選択
    • 折り畳みの開閉
  • ダブルクリック
    • ヘルプウィンドウでカーソル下の単語でタグジャンプ
  • スクロール
    • ウィンドウ内をスクロール
  • ドラッグ(ttymouse の値が xterm2 以上の場合に可能)
    • 範囲選択
    • ウィンドウサイズの変更
    • タブの移動

出来ることを並べただけでは伝わりにくいので動画を用意しました。

どうですか?マウスで端末 vim と対話できるなんてちょっと驚きですよね。

動画の最後の方ではクリック以外のマウス操作が確認できたプラグインをいくつか紹介しています。

  • mattn/calendar-vim
    • ヘッダの <Prev Today Next> をダブルクリック可能
    • 日付をダブルクリックでその日の日記を編集
  • thinca/vim-ref
    • カーソル下のキーワードをダブルクリックでタグジャンプしたり、K 相当の動作
  • Shougo/vimfiler
    • ファイルをダブルクリックするとOS関連付けで開く
    • ディレクトリをダブルクリックするとツリーの開閉

端末 224 桁問題

このようにマウスによる操作ができることを知ってしばらくは、その秘めたる可能性を探るために vim のあちこちを触ってはその反応を見て喜んでいたのですが、いつも使っている MacBook Pro Retina で最大化している端末だと、なぜか右端の方をクリックするとカーソル位置がおかしくなったりするなどの怪現象に遭遇しました。

どうやらこれは端末界ではよく知られたことらしく、ヘルプにも次のような注記があります。

NOTE: In some (older) xterms, it's not possible to move the cursor past column
95.  This is an xterm problem, not Vim's.  Get a newer xterm color-xterm.
Now the limit is 223 columns.

このような制約を強いられることを憂慮する @kefir_ さんによってこの問題が vim-jp に提議され、SGR 形式のマウストラッキングサポートが patch 7.3.632 として晴れて本体に取り込まれました。

このパッチを適用すると ttymouse の値として sgr が指定できるようになります。私の端末だと 318 桁でもマウスイベントを認識してくれるようになりました。詳しいことはさっぱり理解できませんが、次のようなことらしいです。 後者の利点を見いだそうとすると夜も眠れませんが、これで最近の幅広なディスプレイで右側が余っている端末 vim でも安心してマウスが使えます。

その後 patch 7.3.700 で機能認識の問題が修正されましたので、現在は次のような設定を .vimrc に書いています。

おわりに

ここで紹介したマウス操作はヘルプに書いてあることばかりですが、実際に端末(GNU Screen 含む)越しにスクロールやドラッグができると便利なものです。端末作業をしているとついマウスによる操作をおろそかにしがちですが、適材適所、使い分けてゆきたいですね。

明日は @tyru さんです。何連鎖まで行くでしょうか。楽しみですね。

0 件のコメント:

コメントを投稿