Dictionaries
vimscript의 마지막 변수 타입은 dictionary
이다. vimscript의 dictionary는 python의 dict, Ruby의 hash, Javascript의 object와 비슷하다.
dictionary는 중괄호 ({}
)로 만들어진다. 값은 여러가지 타입이 들어올 수 있지만, key는 string만이 들어올 수 있다.
:echo {'a': 1, 100: 'foo'}
{'a': 1, '100': 'foo'}
vimscript가 100을 '100'
으로 변환한 것을 볼 수 있다.
또한 vimscript는 Javascript와는 달리 딕셔너리 마지막에 trailing comma를 추가할 수 있다.
:echo {'a': 1, 100: 'foo',}
{'a': 1, '100': 'foo'}
이 책에서는 (특히 여러줄로 정의할 경우에는 더욱) 반드시 dictionary에 trailng comma를 붙일 것을 권장하고 있다.
Indexing
key로 딕셔너리를 탐색하는 문법은 대부분의 언어와 비슷하다.
:echo {'a': 1, 100: 'foo',}['a']
1
:echo {'a': 1, 100: 'foo',}[100]
foo
위에서 정의할 때와 같이 100
을 '100'
으로 변환해서 처리해준다.
vimscript는 Javascript 스타일의 dot
방식도 지원한다.
:echo {'a': 1, 100: 'foo',}.a
1
:echo {'a': 1, 100: 'foo',}.100
foo
Assigning and Adding
dictionary에 값을 추가하는 것은 간단하다.
:let foo = {'a': 1}
:let foo.a = 100
:let foo.b = 200
:let foo['c'] = 300
:echo foo
{'a': 100, 'b': 200, 'c': 300}
Removing Entries
dictionary에서 값을 제거하는 방법은 두가지가 있다.
:let test = remove(foo, 'a')
:unlet foo.b
:echo foo
{'c': 300}
:echo test
100
remove
함수는 해당 키로 제거한 값을 변수로 사용 가능하고, unlet
은 불가능하다.
dictionary에 키가 없는 경우에는 에러가 발생한다.
:unlet foo["asdf"]
remove
와 unlet
은 대개는 개인의 취향이다. 글쓴이는 remove
가 더 유연하기 때문에 이를 더 선호한다고 한다
Dictionary Functions
list와 비슷하게 vim은 dictionary에 사용하는 많은 빌트인 함수가 있다.
:echom get({'a': 100}, 'a', 'default')
100
:echom get({'a': 100}, 'b', 'default')
default
또한 해당 키가 존재하는지도 확인이 가능하다.
:echom has_key({'a': 100}, 'a')
1
:echom has_key({'a': 100}, 'b')
0
key, value 쌍을 리스트 형태로 끄집어 낼 수도 있다.
:echo items({'a': 100, 'b': 200})
[['a', 100], ['b', 200]]
vimscript의 dictionary는 순서가 없기 때문에 items
가 실행되어도 특정한 순서를 기대하면 안된다.
Exercises
Read
:help Dictionary
. All of it. Notice the capital D.Read
:help get()
.Read
:help has_key()
.Read
:help items()
.Read
:help keys()
Read
:help values()
'tools > vim' 카테고리의 다른 글
Learn Vimscript The Hard Way - 39. Functional Programming (0) | 2020.04.19 |
---|---|
Learn Vimscript The Hard Way - 38. Toggling (0) | 2020.04.18 |
Learn Vimscript The Hard Way - 36. Looping (0) | 2020.04.16 |
Learn Vimscript The Hard Way - 35. List (0) | 2020.04.15 |
Learn Vimscript The Hard Way - Grep Operator, Part Threee (0) | 2020.04.13 |