変数
宣言とスコープ
" 変数の定義let foo =4" 変数の削除
unlet foo
変数にはスコープがあり、変数名の前にl:
などを付けて指定する
省略した場合は、関数内であればl:
、それ以外であればg:
となる
- b
現在のバッファにローカル - w
現在のウィンドウにローカル - t
現在のタブページにローカル - g
グローバル - l
関数にローカル - s
:source
されたVim scriptにローカル - a
関数の引数(関数内のみ)let
時には指定できない - v
グローバル、Vimがあらかじめ定義
変数を作成の際だけでなく代入の際もlet
をつける
letl:foo =1" 代入letl:foo =3
コンソール出力
let foo =1
echo foo
"=> 1
型
数値
" 数値let foo =1"=> 1" 加算let foo +=2"=> 3" 減算let foo -=1"=> 2
文字列
" 文字列let foo ='a'let foo ="a"" 文字列の連結let bar = foo .'bc'
リスト
" リストlet foo =['a','b']let bar =['c','d']"=> ['a', 'b']" 連結( + )
foo + bar
"=> ['a', 'b', 'c', 'd']let foo += bar
"=> ['a', 'b', 'c', 'd']" 取り出し
foo[2]"=> 'c'" 最後の要素を取り出し
foo[-1]"=> 'd'" 部分リスト" 2番目から最後までlet endlist = foo[2:]"=> ['c', 'd', 'e']" 1個の要素からなるリスト: [3]let shortlist = foo[2:2]"=> ['c']" リストのコピーを作るlet otherlist = foo[:]"=> ['a', 'b', 'c', 'd', 'e']" 変更let foo[4]='f'"=> ['a', 'b', 'c', 'd', 'f']
辞書
改行する際は、次行の行頭に \
をつける
" 辞書let dict ={'foo':23,'bar':4}" 辞書let person ={\'name':'ryo',\'height':176,\'weight':64,\'like':{\'drink':'japan-sake'\},\'birthday':[1993,12,29]}
person["name"]"=> 'ryo'
person.name
"=> 'ryo'
条件
trueやfalse型はない1
真理値には数値が使われる。0は偽を意味し、非0は真を表す
if1" 通るelse" 通らないendifif0" 通らないelse" 通るendifif0" 通らないelseif1" 通るendif
ループ
リストを使用
let list =[3,4,6,1]for item in list
echo item
endfor"=> 3"=> 4"=> 6"=> 1let index =0while index < len(list)
echo list[index]let index +=1endwhilefor item in list
if item ==4" 次に進む"
continue
endifif item ==6" ループを抜けるbreakendif
echo item
endfor
エラー制御
try
sleep 10" 例外を投げるthrow"error"catch/^Vim:Interrupt$/
echo 'Ctrl + c でキャンセルされました'catch/^error$/
echo "errorを検知"catch" 例外すべて補足
echo '例外発生'finally" 必ず実行
echo is_wait ? '成功':'失敗'endtry
式
- 三項演算子
empty(list) ? 'a':'b'
- OR
exist('list')|| empty?(list)
- AND
exist('list')&& empty?(list)
- 比較演算
" 等しいa==b" 等しくないa!=b" より大きいa>b" 大きいか等しいa>=b" より小さいa<b" 小さいか等しいa<=b" 正規表現にマッチするa=~b" 正規表現にマッチしないa!~b
- 演算
" 足し算a+b" 引き算a-b" 文字列連結a.b" 掛け算a * b" 割り算a / b" 割った余りa % b
- その他
" 論理否定!a
関数
関数を実行のみの場合はcall
を前につける
それ以外の場合はcallは付けない
let list =[1,2,3]call add(list,4)
echo list
"=> [1, 2, 3, 4]
全般で使用する関数
" コピー(浅い)letl:bar = copy(list)" コピー(深い)letl:bar = deepcopy(list)" 変数が定義されているかif exists('foo')endif" 機能がサポートされているかif has('mac')endif
文字列でよく使用する関数
" 文字列が空かif empty(str)endif" 文字列を評価if eval("a == ". prefix ."_value")endif
リストでよく使用する関数
" 先頭に追加call insert(list,'a')" 末尾に追加call add(list,'z')" 削除(3番目の要素を削除)call remove(list,2)" 削除(3番目から最後までを削除)call remove(list,2,-1)" 並び替えlet sorted_list =sort(list)" 反転let reversed_list = reverse(list)" 重複削除let uniq_list = uniq(list)" 数let length = len(list)" 最大値let max_value = max(list)" 最小値let min_value = min(list)let str =join(list,',')if empty(list)endif
辞書でよく使用する関数
" 要素の追加(変更)let dict['age']=24let dict.age =24" 要素の削除call remove(dict,'name')
unlet dict['name']
unlet dict.name
echo keys(dict)
echo values(dict)
前回: 【vimめも】 14. grep