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
fooAssigning 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
100remove 함수는 해당 키로 제거한 값을 변수로 사용 가능하고, 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')
0key, 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 |