vim script 入門 – 変数とスコープ
私は、正直vimスクリプトについては初心者であり、解説するほどの知識はありませんが、分からないことや疑問に思った事を調べつつまとめていきたいと思います。まずは、タイトルにある通り”変数とスコープ”について簡単にまとめてみました。
基本的な事
vim scriptの変数名は、アルファベット大文字小文字、アンダースコアと数字を含むことができます。但し、数字から始めることはできません。 ※ここでいうアルファベット大文字小文字とはa-z, A-Zを意味します。変数には他のスクリプト言語と同様にスコープがあります。 スコープを指定するには、変数の前にprefixを付けます。例えばg:my_variable のようにg:を付けるとグローバル変数、l:my_variable のようにl:を付けると関数内のローカル変数になります。スコープのprefixを省略すると、関数の外で変数を定義した場合はグローバル変数、関数内ではローカル変数となります。関数に渡された引数を参照する場合は、a:replayのようにa:を変数に付けます。
1 2 3 4 5 6 7 8 9 |
let g:my_variable = "Hello World!" "Global scope function! DispMsg(reply) let l:my_variable = "What's up!" "Local scope echo g:my_variable echo l:my_variable echo a:reply endfunction call DispMsg("Not much") |
What’s up!
Not much
もう一つ、s:を変数の前に付けるとスクリプトスコープとなります。スクリプトスコープの変数は、文字通りそのスクリプトファイル内のみで利用可能となります。
変数のデータ型
vimスクリプトには6つ変数のデータ型があります。
- Number
- String
- Function reference
- List
- Dictionary
- Float
では、一つずつ見ていきます。
1. Number
Number型の変数は、10進数、8進数、16進数となることが可能です。8進数の表現は、0から始まる数値で、16進数は0xまたは0Xから始まる数値です。これら以外は10進数となります。 負の値は、”-“を数字の前に付けます。 この辺りは他のスクリプト言語と変わらないですね。
2. String
文字列には、ダブルクオート、シングルクオートで囲った文字列があります。ダブルクオートは、特別なキャラクタ(例えば、\n \e \t \"
)が内部で使えます。※詳細は、:help exp-quote を参照のこと。 ダブルクオートは、コメントにも使われますので、閉じないとコメントになってしまいます。
3. Function reference
関数の参照型変数(Funcref)は、文字通り関数への参照です。関数定義の名前自体もこのタイプになります。関数を定義する際、その名前は大文字で開始しなければなりませんが、この変数も大文字でなければなりません。関数参照型の変数に、関数の参照を代入するには、function関数を使います。
1 2 3 |
let Myfunc = function('DispMsg') "関数の参照を代入 call Myfunc("Not much") "Myfuncで関数を呼ぶ |
What’s up!
Not much
4. List
[]内にカンマ区切りで値を並べたものがListになります。値は、どのデータ型でも設定することが可能です。vimにもともと付属されている関数で設定、取得、削除等の操作ができます。
add関数
1 2 3 4 |
let my_list = ['KatsuDon','TenDon'] call add(my_list, 'UnaDon') echo my_list 出力 ----> ['KatsuDon', 'TenDon', 'UnaDon'] |
remove関数
1 2 3 |
call remove(my_list, 1) echo my_list 出力 ----> ['KatsuDon', 'UnaDon'] |
insert関数
1 2 3 |
call insert(my_list, 'OyakoDon', 1) echo my_list 出力 ----> ['KatsuDon', 'OyakoDon', 'UnaDon'] |
reverse関数
1 2 3 |
call reverse(my_list) echo my_list 出力 ----> ['UnaDon', 'OyakoDon', 'KatsuDon'] |
sort関数
1 2 3 |
call sort(my_list) echo my_list 出力 ----> ['KatsuDon', 'OyakoDon', 'UnaDon'] |
sublistについて
[:]を使ってListの一部分を取り出すことができます。例えば以下のように[0:2]リストの0番目から2番目までを切り出します。[:2]のように0を省略して書くこともできます。(結果は同じ)また、負の値を指定するとリストの後ろからカウントします。[0:-1]は、全リストを切り出します。
1 2 3 4 |
let my_list = ['KatsuDon','TenDon','UnaDon','OyakoDon'] let my_sublist = my_list[0:2] echo my_sublist 出力 ----> ['KatsuDon', 'TenDon', 'UnaDon'] |
5. Dictionary
Dictionaryは、順番を持たない連想配列のようなものです。キーと値の組み合わせ”:”でつなぎ、カンマ区切りで{}に並べます。キーは、Stringでなければなりません。数値も指定できますが自動的に文字列に変換されます。
1 2 3 |
let my_dict = {'don1':'KatsuDon','don2':'TenDon','don3':'UnaDon','don4':'OyakoDon'} echo my_dict['don2'] 出力 ----> TenDon |
6. Float
浮動小数点数です。vimにもともと付属されている関数で文字列に変換(str2float)したり、整数値に変換(float2nr)することができます。FloatとNumberの和はFloatに変換されます。変数のデータ型は、type関数で確認することができます。 (0:Number, 1:String, 2:Funcref, 3:List, 4:Dictionary, 5:Float)
この記事へのコメントはこちら
コメントを投稿するにはログインしてください。