tools/vim

Learn Vimscript The Hard Way - 20: Conditional

seul chan 2020. 3. 27. 01:27

Conditional

Vimscript에서는 if문을 통해 조건절을 사용한다.

Multiple-Line Statements

Vimscript에서 한 줄로 코드를 처리하기 힘든 경우에는 여러 줄 로 쓸 수도 있지만, pipe character (|)를 사용할 수도 있다.

:echom "foo" | echom "bar"

책의 나머지 부분에서 예시 코드를 실행할 때 newline을 사용하기 싫은 경우 pipeline을 사용해서 작성이 가능하다.

Basic If

:if 1
:   echom "ONE"
:endif

integer 1true로 인식하여 ONE이 반환된다.

:if 0
:   echom "ONE"
:endif

0도 대부분의 프로그래밍 언어와 비슷하게 false로 인식.

특이한 점은 string을 true로 인식하지 않는다는 점이다.

:if "something"
:    echom "INDEED"
:endif

위 예시에서는 아무것도 표시되지 않는다.

더 이상한 점은 string으로 된 숫자는 true로 인식한다 (ㄷㄷ..)

:if "9024"
:    echom "WHAT?!"
:endif

WHAT?!을 반환하는 것을 볼 수 있다. 이를 이해하기 위해 아래 코드를 실행시켜보자.

:echom "hello" + 10
:echom "10hello" + 10
:echom "hello10" + 10

차례대로 10, 20, 10이 나온다.(!) 이를 통해 알 수 있는 점은 아래와 같다.

  • vim은 필요하다면 변수를 강제로 변환시킨다. 10 + "20foo"에서 vim은 "20foo"를 숫자로 변환 (20)시켜 10과 더해 30을 반환시킨다.
  • 숫자로 시작되는 string만 숫자로 변환되고 나머지는 0으로 변환된다.
  • 조건절의 강제 변환과 계산을 완료하여 0이 아닌 숫자가 나오면 if문을 실행시키게 된다.

Else and Elseif

Vimscript는 Python과 비슷하게 elseelseif를 제공한다.

:if 0
:    echom "if"
:elseif "nope!"
:    echom "elseif"
:else
:    echom "finally!"
:endif

Exercises

  • Drink a beer to console yourself about Vim's coercion of strings to integers. (ㅋㅋㅋ)