Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

【vimめも】 15. Vim scriptの基本

$
0
0

変数

宣言とスコープ

" 変数の定義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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>