Vim の window resize を連打しやすくする

blog
tech-vim

Vim の標準キーバインドを崩さずに —- のような連打で window resize できる mapping のメモです

Author

uma-chan

Published

2026-05-10

Modified

2026-05-10

1. はじめに

Vim の window resize は標準で以下のキーバインドが用意されています。

<C-w>-
<C-w>+
<C-w><
<C-w>>

それぞれ window の高さや幅を 1 ずつ変更する操作です。

標準機能としては十分なのですが、少し大きめに resize したいときに毎回 <C-w> を押すのがやや面倒です。

<C-w>-<C-w>-<C-w>-

気持ちとしては、最初の <C-w> だけ押して、あとは resize 方向のキーを連打したい。

<C-w>---

これを実現する mapping のメモです。

2. 設定

vimrc に以下のように書きます。

vimrc
" Resize Window
nmap <C-w>-    <C-w>-<SID>ws
nmap <C-w>+    <C-w>+<SID>ws
nmap <C-w><lt> <C-w><lt><SID>ws
nmap <C-w>>    <C-w>><SID>ws
nmap <SID>ws <Nop>
nnoremap <script> <SID>ws-    <C-w>-<SID>ws
nnoremap <script> <SID>ws+    <C-w>+<SID>ws
nnoremap <script> <SID>ws<lt> <C-w><lt><SID>ws
nnoremap <script> <SID>ws>    <C-w>><SID>ws

これで以下のように resize できます。

<C-w>----
<C-w>++++
<C-w><<<
<C-w>>>>

< は key notation の開始記号として扱われるので <lt> と書きます。 一方で > はそのまま書けます。

3. 仕組み

最初の mapping は標準の resize 操作を実行したあと、<SID>ws という script-local な中継地点に入ります。

nmap <C-w>- <C-w>-<SID>ws

<SID>ws 自体は何もしない mapping です。

nmap <SID>ws <Nop>

ただし、<SID>ws-<SID>ws+ のような続きの mapping も定義しておきます。 そのため、<SID>ws に入った直後に - を押すと、もう一度 <C-w>- が実行されます。

nnoremap <script> <SID>ws- <C-w>-<SID>ws

そして RHS の最後でまた <SID>ws に戻るので、- を押し続けるだけで resize を繰り返せます。

<script> を付けているのは、RHS の <SID>ws だけをこの script-local mapping として解決したいからです。 通常のユーザー定義 mapping と混ざりにくくなります。

4. キーを変える場合

標準の <C-w>-, <C-w>+, <C-w><, <C-w>> を尊重したい場合は上の設定でよいです。

もし Vim のデフォルトにこだわらないなら、H, J, K, L に割り当てる形にもできます。

vimrc
" Resize Window
nmap <C-w>H <C-w><lt><SID>ws
nmap <C-w>J <C-w>-<SID>ws
nmap <C-w>K <C-w>+<SID>ws
nmap <C-w>L <C-w>><SID>ws
nmap <SID>ws <Nop>
nnoremap <script> <SID>wsH <C-w><lt><SID>ws
nnoremap <script> <SID>wsJ <C-w>-<SID>ws
nnoremap <script> <SID>wsK <C-w>+<SID>ws
nnoremap <script> <SID>wsL <C-w>><SID>ws

ただし、この形は <C-w>H などの Vim 標準の window 移動系キーバインドを上書きします。 そのため、標準キーバインドを残したい場合は -, +, <, > のままにするのが無難です。

5. おわりに

私の dotfiles では今は不要になったので外しましたが、設定としてはちゃんと動くのでメモとして残しておきます。