深酒とお昼寝で忘れる

深酒とお昼寝で忘れる

素面でも意図したことを忘れがちなしらふいとさんは、忘れる前に何かしら書き残せたらとても満足のようです

(Neo)vim で同じ列内のウィンドウのみ高さを等しくする

Vim のウィンドウを縦に分割し、さらにそれぞれの列を横に分割します。それぞれの列内のウィンドウは高さが等しいとは限らず、最大化されているウィンドウがあったりします。 f:id:someneat:20170816033006p:plain

沢山ファイルを開いて作業をしていると、こんな風にウィンドウの配置が最適化されていくことがあります。さて、そんなときに一つの列内のウィンドウ「のみ」高さをそろえたくなったときには、どうすれば良いのでしょうか。

CTRL-W = とすると、他の列のウィンドウも含む「全ての」ウィンドウの高さ(と幅)がそろってしまいます。 f:id:someneat:20170816033027p:plain

気になったので 聞いてみたところ、速攻で解決しました。:new | q としましょう(:new の代わりに :split でも可)。

マニュアルによると、Vimequalalways というオプションが有効の場合(デフォルトで有効です)、ウィンドウを分割したり(:new)、閉じたり(:q)する際に全てのウィンドウの大きさをそろえようとします。と書いてあるのですが、その挙動はもう少し複雑で全てのウィンドウではなく動作に関連する特定のウィンドウ(?)の大きさがそろうようです。:new するとウィンドウは横に分割され、その列内のウィンドウのみ、高さがそろいます。その後続いて :q すると新しく開いたウィンドウは閉じられ、その列内のウィンドウの高さがそろいます。このようにして所望の動作になるわけです。 f:id:someneat:20170816033046p:plain

既存のウィンドウ操作のショートカットに似たマッピングにしてみます。

nnoremap <C-w>e :new \| q<CR>
nnoremap <C-w><C-e> :new \| q<CR>

地味に便利。