パーソナルツール

変数のスコープ

作者: 小見 拓 最終変更 2012年01月08日 12時14分

変数のスコープ

  • 変数はファンクション内でのみ使用可能。
:let l:var1 = "text value"
  • ファンクション内でのみ使用可能。ファンクションの引数用。
:let a:var2 = "text value"
  • 変数はスクリプト内でのみ使用可能。
:let s:var3 = "text value"
  • 変数はバッファ内でのみ使用可能。
:let b:var4 = "text value"
  • 変数はウィンドウの範囲でのみ使用可能。
:let w:var5 = "text value"
  • 変数はタブの範囲でのみ使用可能。
:let t:var6 = "text value"
  • 変数はどこからでも使用可能。
:let g:var7 = "text value"
  • 同じく、変数はどこからでも使用可能。
:let var8 = "text value"
  • vimエディタが定義、設定する変数。
:let v:var9 = "text value"
  • 変数のスコープの使い分けサンプル
:if exists("g:loaded_hello")
    :finish
:endif
" 外部からでも、変数を操作させたい時は「g:」を使う。
" (ここの場合、他のスクリプトでg:loaded_helloを1に変更して、
" スクリプトを読み込まないようにできる。)
:let g:loaded_hello = 1

" そのスクリプト内だけで使用する変数は「s:」を使う
:let s:save_cpo = &cpo
:set cpo&vim

:function! Hello(opt)
    " ファンクションの中だけで使用する変数には「l:」を使う
    :let l:text = "Hello World "
    " ファンクションのパラメータは「a:」で参照できる
    :let l:text .= a:opt
    :echo l:text
:endfunction

:command! -narg=1 Hello :call Hello(<f-args>)
:let &cpo = s:save_cpo

Note

このサイトで公開している「vimスクリプト リファレンス」では、 サンプルコードでスコープを使用していません。
なぜなら、スコープを使用したサンプルコードを書いてしまうと、 そのままではコピーしても動かない可能性が高いので、 読む方が混乱すると考えたからです。
余裕のある方は、当サイトのコードをスコープを使用したコードに置き換えてから、 使用してください。

ドキュメントアクション
コメント
blog comments powered by Disqus