Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5657

今日のスクリプト(gVim):ウィンドウの位置と幅(2)

$
0
0

Windowの位置と幅,高さを任意に変更します.

◆やりたいこと

Windowの位置と幅,高さを変更するスクリプト(前回アップしたのはこちら → 「今日のスクリプト: (Vim) Windowサイズと位置の調整」)の拡張です.

前のバージョンは決め打ちでした.
• SetLines()でフル行数か直前か
• SetWidth()で幅いっぱいか直前のトグル

これはこれでシンプルでいいです.
が,固定の位置,幅,高さに戻したいことがあります.

それで,それぞれの関数に引数をもたせました.
ただ,引数がない時のエラーがうざかったので,
「引数 に '0'を入れるとトグル」になるようにしました.

◆まずは高さ:SetLines(N) 関数

""" (Toggle)Set win lines Full <-> previous
"""
map <Leader>j :call SetLines()
map ,wj :call SetLines()
""
""" SetLines(N) -- N=0 --> Toggle, N: line num
function! SetLines(nlin)
if a:nlin == 0
if !exists("g:oline")
let g:oline = &lines
let &lines=999
else
let &lines = g:oline
unlet g:oline
endif
else
let &lines = a:nlin
endif
endfunction

◆幅: SetWidth(N) 関数

"
"""""" (Toggle)Set win width Full <-> previous
"
map <Leader>@ :call SetWidth(0)
map ,w@ :call SetWidth(0)
map ,wl :call SetWidth(0)
""
"""""" SetWidth(N) function. N=0 --> Toggle / N --> width number
"" command! -nargs=+ SetWidth call SetWidth()
function! SetWidth(nwide)
if a:nwide == 0
if !exists("g:owide")
let g:owide = &columns
let &columns=999
else
let &columns = g:owide
unlet g:owide
endif
else
let &columns = a:nwide
endif
endfunction

◆3つの関数をcall → ひとつのキーバインドに割付け: ",w1"

""
"" Set winpos to Initial pos
""
""  初期値を入れておく.
let iniposx = 160
let iniposy = 20
let iniwide = 90
let inilines = 35
map <Leader>1 :call SetWinpos(iniposx,iniposy)
map ,w1 :call SetWinpos(iniposx,iniposy):call SetWidth(iniwide):call SetLines(inilines)
""
"" iniposx.... はunletしたほうが行儀が良い?そんなことしらん.
""

◆ポジション関数は変更なし: SetWinpos(x,y)

""
"" set winpos to 2nd Display
let newposx = -1180
let newposy = -980
map <Leader>w :call SetWinpos(newposx, newposy)
map ,ww :call SetWinpos(newposx, newposy)
""
"""""" (Toggle)Set win Position to x,y <-> previous
command! -nargs=+ SetWinpos call SetWinpos()
function! SetWinpos(posx, posy)
if !exists("g:oposx")
let g:oposx = getwinposx()
let g:oposy = getwinposy()
echo "winpos "a:posx . " " . a:posy
execute "winpos " a:posx . " " . a:posy
else
echo "winpos "g:oposx . "\  " . g:oposy
execute "winpos " g:oposx . " " . g:oposy
unlet g:oposx g:oposy
endif
endfunction

スクリプトは以上です.

◆呼び出し方をまとめると,

  • 全幅トグル: ,wl
  • 全高トグル: ,wj
  • 別ポジション: ,ww
  • 初期ポジション: ,w1

ま,キーバインドはご自由に.


Viewing all articles
Browse latest Browse all 5657

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>