tools/vim

Learn Vimscript The Hard Way - 25: Numbers

seul chan 2020. 4. 2. 23:09

Numberes

이제 vimscript에서 사용가능한 변수 타입을 살펴볼 것이다. 우선은 numeric type

Vimscript는 두가지 숫자 변수를 사용한다: NumberFloat

  • Number: 32 bit signed integer. Integer라고 생각하면 될듯
  • Float: floating point number. 그냥 사용하는 float

Number Formats

Vim에서는 다양한 방식으로 Number를 사용 가능하다.

일단 가장 기본적인 방법

:echom 100
:echom 0xff

255가 출력되는데, 0x prefix를 사용하여서 hex notatoin을 사용할 수 있다.

:echom 010

8이 출력되는 것을 볼 수 있는데, 0을 prefix로 사용하면 8진법 숫자를 사용할 수 있다. 주의해야할 점은 유효한 8진법 숫자가 아니면 일반 숫자가 사용된다.

:echom 017
:echom 019

017은 8진법으로 15(8 + 7)가 출력괴지만 019는 유효하지 않은 8진법이기 때문에 19가 출력된다. 이 경우 에러 처리를 하지 않기 때문에 가능하면 이런 방식의 사용은 피하는게 좋다.

Float Formats

Float도 다양한 방식으로 사용이 가능하다.

:echo 100.1

기대대로 100.1이 출력된다.

또한 exponential notation(지수 표기법)을 사용해서 나타낼 수 있다.

지수표기법을 잘 모르겠으면 이 포스트에 정리해 놓았으니 참고

:echo 5.45e+3

-지수도 마찬가지로 사용 가능

:echo 15.45e-2

양수 지수를 사용할 경우 +는 생략 가능하다

:echo 1.0e+5
:echo 1.0e5

동일하게 1.0e5가 출력되는 것을 볼 수 있다.

소숫점(.)은 필수로 사용해야 한다. 쓰지 않으면 에러가 발생한다.

:echo 1e+3

E15: Invalid expression: 1e+3 에러가 발생한다.

Coercion

Number 형태와 Float 형태를 계산하거나 비교하면 vim은 자동으로 Number를 Float으로 변환한다.

:echo 2 * 2.0

Float으로 변환된 4.0이 출력된다.

Division

두 Number를 나누면 나머지는 버림된다.

:echo 3 / 2

1.5가 아닌 1이 출력되는 것을 볼 수 있다.

만약 소숫점 계산을 하고 싶은 경우에는 둘 중 하나를 float 형태로 사용하여야 한다.

:echo 3 / 2.0
:echo 3.0 / 2

둘 다 1.5가 출력된다.

Exercises

  • Read :help Float. When might floating point number not work in Vimscript?

+float이 컴파일 되지 않은 경우에는 사용이 불가능하다.:ve (:version) 명령어나 vim --version으로 자신의 vim에 어떤 기능이 컴파일 되었는지 확인이 가능하다.

  • Read :help floating-point-precision. What might this mean if you're writing a Vim plugin that deals with floating point numbers?
    (무슨 말인지 잘 모르겠다...)