LoginSignup
17
12

More than 5 years have passed since last update.

Vimでもminimapぽいことがしたいのでnanomap.vimをつくった

Posted at

TL; DR

こういうVim pluginを作りました。
https://github.com/hisaknown/nanomap.vim

Sublime TextにおけるMinimap

オシャレテキストエディタとして有名なSublime Textには、Minimapという機能があります。
画面の右側に出る、コードの縮小表示です。
Minimap on Sublime Text

私は主にVimを使っているのですが、Vimにもこういう機能が欲しいなあと常々思っていました。

偉大な先達たち

実はこれまでにもVimでMinimapしようとした人々はいらっしゃいます。

  • https://github.com/koron/minimap-vim
    • kaoriya-vimも配布しているKoRoNさんの実装
    • Minimap対象のGVimに隣接させて、フォントサイズの小さいGVimを立ち上げるという変態的な実装
  • https://github.com/severin-lemaignan/vim-minimap
    • Lemaignanさんの実装
    • 別バッファでMinimapを表示する
    • PythonのDrawilleを使って、そこそこ表現力の高いマップを実現している

問題点

  • KoRoNさん実装
    • GVimでしか動かない & GVim複数起動はちょっと……
  • Lemaignanさん実装
    • スクロールしていくと表示が崩れる…… @ GVim on Windows
  • (そもそも論ですが) 元々のMinimapってカーソル周辺の縮小表示しかない (i.e. 大きいファイルが対象の場合、Minimap自体にスクロールが発生する) けど、どっちかというとカーソル周辺よりはファイル全体のoverviewが見たい

作ったもの

https://github.com/hisaknown/nanomap.vim
Screencast of nanomap.vim

機能

  • 対象バッファの右側に、細長いバッファをつくってファイル全体の密度を濃淡で表示
    • Unicodeの上半分ブロック (▀) を使うことで、解像度を底上げ
  • 現在の表示位置をハイライト表示
  • マップの任意の行で <CR> すると該当行に移動
  • (最近の流行りに乗って、timerjobを使って実装)
  • (setbuflineも使っているので、最近のVim (たぶん8.0.1274以降) でないと動かない)

Future work & Known issues

  • /で検索したときに、どこにマッチがあるか表示したい
    • やればできそう
  • syntaxとhighlihgtを大量に定義しているので (?)、マップの更新時 (デフォルトでは500msおき) に若干もたつくことがある
    • これはどうにかしたいけれど、どうすれば良さそうか分からない……
    • Workaroundとしては、使う色数を減らすとよいと思われる
  • もうちょっと気の利いた配色を作りたい

おわりに

初Vim pluginなのでbuggyだと思われますが、ぜひ使ってみてください!

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12