変数のスコープ
作者: 小見 拓
—
最終変更
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スクリプト リファレンス」では、
サンプルコードでスコープを使用していません。
なぜなら、スコープを使用したサンプルコードを書いてしまうと、
そのままではコピーしても動かない可能性が高いので、
読む方が混乱すると考えたからです。
余裕のある方は、当サイトのコードをスコープを使用したコードに置き換えてから、
使用してください。

前: レジスタの値を操作する
