rcmdnk's blog

実践Vim 思考のスピードで編集しよう! (アスキー書籍) | Drew Neil, 新丈 径 | 工学 | Kindleストア | Amazon

Vimスクリプトの中で、バッファ変数があればそれを参照し、 なければグローバル変数を参照して判断する、みたいなことをしたい時の簡潔な書き方。

Sponsored Links

exists

Vimではexists関数を使うことで変数が存在してるかどうか判断できます。

これを使うと

1
2
if exists('g:my_flag') && g:my_flag == 1
...

みたいな事が出来ます。

get

ただこれだとmy_flagを2回書いててあれです。 そこでgetを使うとより簡潔に書けます。

1
2
if get(g:, 'my_flag', 0) == 1
...

getは最初に変数のスコープを入れて次に変数名(スコープ部分は外す)、 最後に初期値を入れると、 変数が存在していればその変数の値、なければ初期値を返してくれます。

vim-jp » Hack #239: グローバル変数を安全に参照する

さらには1か0かみたいな場合であれば 1ならTrue、0ならFalseになるので

1
2
if get(g:, 'my_flag', 0)
...

でOK。

バッファ変数とグローバル変数を順に調べてチェックする

getでバッファ変数を確認し、その初期値としてgetでグローバル変数を取ってくれば一気に書けます。

1
2
if get(b:, 'my_flag', get(g:, 'my_flag', 0))
...

getを使わなければ

1
2
if (exists('b:my_flag') && b:my_flag) || (!exists('b:my_flag') && exists('g:my_flag') && g:my_flag)
...

とか、三項演算子を使って

1
2
if exists('b:my_flag') ? b:my_flag : (exists('g:my_flag') && g:my_flag)
...

とか。getを使うと大分スッキリします。

Sponsored Links
Sponsored Links

« VimのSyntaxチェッカーをALEにした macOS High Sierra(10.13)にアップグレードした »