リストの同一性

リストが入った変数を別の変数へ代入すると、参照になる。

知らなかったー。

copy()でリストのコピーを作ればOKと思ったが、
"浅いコピー"になるので要素がリストだとコピー元も変更される。
完全にコピーを作ろうと思ったら、deepcopy()を使えばOK。

:help list-identity
Vim documentation: eval

let a = [1,2,3]
let b = a
call add(b, 4)

echo a
" [1, 2, 3, 4]
let a = [1,2,3]
let b = a
call extend(b, [4,5,6])

echo a
" [1, 2, 3, 4, 5, 6]
let a = [1,2,3]
let b = copy(a)
call extend(b, [4,5,6])

echo a
" [1, 2, 3]
let a = [1,2,[3,4,5]]
let b = copy(a)
let b[2][2] = 'hoge'

echo a
" [1, 2, [3, 4, 'hoge']]
let a = [1,2,[3,4,5]]
let b = deepcopy(a)
let b[2][2] = 'hoge'

echo a
" [1, 2, [3, 4, 5]]

Vim Scriptテクニックバイブル

絶対買う!

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖