関数の使い方

先日のメニュー表示非表示についてid:tyruさんから関数にした方がいいとのありがたいコメントをいただいた。しかもgithubにお手本まで!ほんとにありがとうございます。(2週間もたってIDコールされても傍迷惑なだけかもしれないけど)

折角なので写経しながら、関数になったのを見てみました。

"Hide menu and Tool bar
nnoremap <silent> <C-F2> :<C-u>call <SID>toggle_guioptions()<CR>

function! s:toggle_guioptions()
    if &guioptions =~# 'T'
        set guioptions-=T
        set guioptions-=m
    else
        set guioptions+=T
        set guioptions+=m
    endif
endfunction

1行目はコメント
2行目にキーマップの設定

  • noremapはノーマルモード、ビジュアルモード、オペレータペンディングモードで有効でなキーバインディングを定義する
  • 今回の「n」noremapはそのうちノーマルモードだけを対象とする。
  • を入れることで、コマンドラインへの出力を抑制(ちらつき防止とのこと)
  • CTRLキーとF2キーを押したとき
  • 5回繰り返すなどのcountの指定の影響を除去し、意図しないコマンドが実行されないようにする
  • call 次の関数を呼び出せ
  • toggle guioptions() 今回設定した関数の名前
  • エンターキー

つまりノーマルモードのときにCTRLキーとF2キーを一緒に押したら、コマンドラインモードに移行してtoggle guioptions()を呼び出せという内容

4行目で今回設定するtoggle guioptionsについての内容がかいてある。 function!がいまから関数を設定するよという宣言みたいなものかな。
5行目でif文による条件分岐 この場合、現在のguioptionsをチェックして、Tが含まれていたら、
guioptions-=T (ツールバー非表示) 6行目
guioptions-=m (メニューバー非表示) 7行目
逆に現状にTがなかったら、ツールバーもメニューバーも表示する。 8~10行目

ということで理解した。
追加で調べる内容

  • function! の最後にある!
  • &guioptions の先頭の&
  • if文の=右にある~#