simple-web-system technology

Webに関する技術をシンプルに扱うブログ

Vimの画面管理に関して Windowだけ優遇されてない?BufferとTabの待遇改善を要求する 

ウィスキーで酔ったまま書いた駄文です。

あと、Emacsを使っててVimの画面管理と大体同じことを思うことが結構あったので参考になるかもです。

Vimの画面管理の概要

Vimの画面管理には3つの概念があります

  • Window
  • Buffer
  • Tab

このうち、互いに関係しているのが、TabとWindow、WindowとBufferです。

この関係性からわかるように、VimではWindowが画面管理において重要な位置を占めています。

まずWindowの役割は画面を分割することです その分割したエリアに一つずつBufferを割り当てます

Bufferは主に編集画面やファイルツリーなどの操作画面のことです。
VimはバックグラウンドでBufferのリストを持っていて、Windowの数だけそのBufferのリストの中身を表示できるようになっています。
同じBufferを複数で表示した場合、同期的に変更されます。
同じBufferだから、それが自然ですよね

Tabは簡単に行けば、Windowの親です
WindowやMacで例えれば仮想デスクトップに当たるものです
複数のWindowをまとめて管理をまとめて管理することができます。

こうしてみると、モダンなエディタとは概念自体が全然違いますよね

まぁ、ここらへんは本題ではないので、詳しくはググってください

なんでWindowだけKeybinding設定されてるの?

Windowは、Ctrl-wをPrefixに、様々な動作を行えるKeybindingが用意されています。
画面を縦に分割であれば、Ctrl-w vで出来ます。 しかし、BufferとTabには、特にPrefixが設定されているということはありません。

Windowが立場的に重要なのはわかるんですけど、なんでBufferとTabはPrefixがないんですか?

このあとは、個人的に自分がデフォルトでほしかった機能を改善案としてまとめてます。

Tab改善案

Tabに関しては、デフォルトで次のTab表示、前のTab表示等の機能があります。 Ctrl-tでPrefixをつけてくれるとうれしいなーって感じです。 Ctrl-t nで次のBufferとか

gtで次のタブ、gTで前のタブとか出来ますけど、わかりづらい……。

Buffer改善案

Bufferに関しては、デフォルトでBuffer一覧、次のBuffer表示、前のBuffer表示のコマンドがあります。
こちらを、Ctrl-bのPrefixでデフォルトでまとめてくれると嬉しいです。
例えば、Buffer一覧を出すのは、Ctrl-b lとか

tmuxコマンドと被ってるのは、見なかったことにします。

あと、TabごとにBuffer一覧を分ける機能がほしいです。 プロジェクトごとにTab切りたいのに、Buffer一覧がプロジェクト関係なく全部表示されてしまうので

Emacsだとこういう拡張あったよね。

他には、Buffer一覧を常に表示する機能が欲しかったですね。 WindowとTabは常に表示できるのに、なぜBufferだけ表示できないのか。

なんでこんなことを言うのか

Spacemacsとかdoom-emacsとかSpacevimとかのエディタ用フレームワーク使ってて思いました。 デフォルトのKeybinding使いづらい、と

なんというか体系的にわかんない部分とか結構あるんですよね。
oで改行とか、なんで?ってなるし 細かい機能に関しては、仕方ないのない部分もあるかもしれないけど、 画面の管理に関しては、そこまで広い範囲でもないので体系的に整備して欲しかったねーって感じ

こういう体系を気にしてるVimフレームワークとかありませんかね?

自分はどうしているか

まず、Tab使ってないです。 プロジェクトごとにTmuxのWindowを分けて、Vimを起動しています。 そして、必要低限な画面管理の機能には、<leader>をPrefixに機能を割り振っています。
LeaderはSpaceにしています。 

だから、space bで、Buffer一覧を開くようにしています。 この際、ある程度、使うキーが英単語の頭文字になるようにしています 覚えやすいので

ついでにBlankなTabとWindowの動きも見直す

個人的な話なんですが、Bufferを削除すると、そのBufferを表示しているWindowも閉じる挙動が好きじゃないです。
3つも概念があるのに、更にそれぞれの間で連動する挙動があるとか、辛すぎます

自分はプラグインを使って、Bufferを閉じても、Windowを閉じないようにしました
https://github.com/moll/vim-bbye

まとめ?

ぶっちゃけ、究極的には自己学習して、Keygbinding設定すれば問題ない話なんですが、もっと操作が体系的になったVimフレームワークありませんかね?流行りませんかね?