私はWindowsユーザであり、WindowsでもVimを使う。
しかし、WindowsのコマンドプロンプトでVimを使うのは、どうにも不便だと感じていた。
というのも、コマンドプロンプトのサイズの変更が面倒だからであろう。
しかし、
set lines
set columns
で値を指定すれば、コマンドプロンプトのVim内部から、コマンドプロンプトのウィンドウサイズを変更することができる。
Vimを終了すると、元のサイズに戻る。
これを利用して、ウィンドウの最大化のトグルコマンドを定義してみる。
ついでに、GUI用のウィンドウの最大化のトグルコマンドも定義しておいた。
また、一般的なアプリケーションにおいて、F11や
augroup MyAutoCmd autocmd! augroup END if has('win16') || has('win32') || has('win64') command! FullSize call s:full_size() if !has('gui_runnig') if has('vim_starting') let s:is_fullsize = 0 let s:lines = 0 let s:columns = 0 let s:x_pos = '' let s:y_pos = '' endif autocmd MyAutoCmd VimLeave * \ if s:is_fullsize \ | exec 'winpos' . s:x_pos . s:y_pos \ | endif function! s:full_size() if s:is_fullsize exec 'winpos' . s:x_pos . s:y_pos let &lines = s:lines let &columns = s:columns let s:is_fullsize = 0 else let s:lines = &lines let s:columns = &columns let s:wstrlst = split(s:get_winpos_strs(), ',') let s:x_pos = s:wstrlst[0][2:] let s:y_pos = s:wstrlst[1][2:] winpos -8 -8 set lines=999 columns=999 let s:is_fullsize = 1 endif endfunction function! s:get_winpos_strs() let l:wstr = '' redir => l:wstr silent! winpos redir END let l:wstr = substitute(l:wstr, '[\r\n]', '', 'g') return l:wstr[17:] endfunction else if has('vim_starting') let s:is_fullsize = 0 endif function! s:full_size() if s:is_fullsize simalt ~r | let s:is_fullsize = 0 else simalt ~x | let s:is_fullsize = 1 endif endfunction endif noremap <silent> <F11> :<C-u>FullSize<CR> noremap! <silent> <F11> <Esc>:FullSize<CR> noremap <silent> <M-F11> :<C-u>FullSize<CR> noremap! <silent> <M-F11> <Esc>:FullSize<CR> endif
CUI用の設定としては、linesとcolumnsの値や、引数無しのwinposコマンドでウィンドウ位置を取得して、それを記憶している。(getwinposx()関数とgetwinposy()関数でウィンドウ位置は取得できないが、winposコマンドでは取得可能である)
GUI用の設定としては、元々備わっている最大化と元に戻すメニューコマンドを用いているだけである。
あまり多くの場合を想定して書いたわけではないので、うまく動作しないこともあるかもしれない。
まぁ、しかし、わざわざWindowsのコマンドプロンプト上でVimを動かすのは、たとえ最大化が楽だとしても、あまりオススメできるものではないが...。(画面描画が遅いので、やや不快感がある)
やはり、Windowsにおいては、gVimか、Cygwinのmintty上でVimを使うべきだろう。