Lists
우리는 많은 변수를 작업했지만, 아직 이를 합친 적은 없었다. vim은 두 가지 aggregate type을 지원하는데, 그 중 첫 째는 리스트이다.
vimscript의 list는 순서가 있다.
:echo ['foo', 3, 'bar']
['foo', 3, 'bar']
vim 리스트는 중첩도 가능하다.
:echo ['foo', [3, 'bar']]
['foo', [3, 'bar']]
Indexing
vimscript 리스트는 파이썬같이 zero-indexed 방식 사용한다. 인덱싱 방식도 비슷하다.
:echo [0, [1, 2]][1]
[1, 2]
파이썬처럼 뒤에서 인덱싱도 가능하다.
:echo [0, [1, 2]][-2]
0
Slicing
슬라이싱도 파이썬 개발자에게는 아주 익숙해 보이겠지만 항상 같지는 않다.
파이썬에서는 마지막 범위를 제외하는 대신에 vim에서는 포함시킨다. 아래 예시는 파이썬에서는
['a', 'b']
를 반환한다.
:echo ['a', 'b', 'c', 'd', 'e'][0:2]
['a', 'b', 'c']
안전하게 최대값을 높게 입력해도 작동한다
:echo ['a', 'b', 'c', 'd', 'e'][0:100000]
['a', 'b', 'c', 'd', 'e']
음수로 슬라이싱도 가능하다.
:echo ['a', 'b', 'c', 'd', 'e'][-2:-1]
['d', 'e']
시작이나 끝을 쓰지 않고 사용이 가능하다.
:echo ['a', 'b', 'c', 'd', 'e'][:1]
['a', 'b']
:echo ['a', 'b', 'c', 'd', 'e'][3:]
['d', 'e']
string도 인덱싱이 가능하다.
:echo "abcd"[0:2]
abc
string에 음수 인덱싱은 사용할 수 없다. 하지만 슬라이싱시에는 음수를 사용할 수 있다 (왜지..?)
" 아무것도 리턴되지 않는다
:echo "abcd"[-1]
:echo "abcd"[-1] . "abcd"[-2:]
cd
Concatenation
vim의 리스트를 +
를 사용해서 합칠 수 있다.
:echo ['a', 'b'] + ['c']
['a', 'b', 'c']
vimscript의 리스트는 딱히 더 얘기할 것이 없다. 다른 언어들과 비교하면 놀랄만큼 정상적이다. (고 하는데 왜 그런건지는 잘.. 다른 vimscript의 문법에 비하면 훨씬 낫긴 하다)
List Functions
vim은 리스트에서 사용할 수 있는 여러 빌트인 함수를 가지고 있다.
:let foo = ['a']
:call add(foo, 'b')
:echo foo
['a', 'b']
add
함수로 쉽게 리스트에 값을 추가할 수 있다.
len
도 사용이 가능.
:echo len(foo)
2
아래와 같이 get
으로 해당 인덱스를 가져올 수 있고, default 값도 줄 수 있다.
:echo get(foo, 0, 'default')
a
:echo get(foo, 100, 'default')
default
index
함수는 해당 값이 존재하는 첫 번쨰 인덱스를 반환한다. 없다면 -1
을 반환
:echo index(foo, 'b')
1
:echo index(foo, 'nope')
-1
이제 join
을 사용해보자.
:echo join(foo)
a b
:echo join(foo, '---')
a---b
:echo join([1, 2, 3], '')
123
join
은 두 번째 인자로 받은 값으로 해당 리스트의 값을 join해 주고 주어지지 않으면 기본으로 space를 사용한다.
reverse
함수는 해당 리스트의 순서를 역순으로 바꿔준다.
:call reverse(foo)
:echo foo
['b', 'a']
:call reverse(foo)
:echo foo
['a', 'b']
Exercises
Read :help List. All of it. Notice the capital L.
Read :help add().
Read :help len().
Read :help get().
Read :help index().
Read :help join().
Read :help reverse().
Skim :help functions to find some other list-related functions I haven't mentioned yet. Run :match Keyword /\clist/ to case-insensitively highlight the word list to make it easier to find what you're looking for.
'tools > vim' 카테고리의 다른 글
Learn Vimscript The Hard Way - 37. Dictionaries (0) | 2020.04.17 |
---|---|
Learn Vimscript The Hard Way - 36. Looping (0) | 2020.04.16 |
Learn Vimscript The Hard Way - Grep Operator, Part Threee (0) | 2020.04.13 |
Learn Vimscript The Hard Way - 33. Case Study: Grep Operator, Part Two (0) | 2020.04.12 |
vim 자동완성의 끝판왕, coc.nvim (0) | 2020.04.11 |