tools/vim

Learn vimscript the hard way - 19장. Variables

seul chan 2020. 3. 24. 21:23

Variables

:let foo = "bar"
:echo foo

:let foo = 42
:echo 42

vimscript는 동적 타입 언어라는 것을 볼 수 있다.

Options as variable

special syntax로 option을 set 할 수 있다. variable 앞에 & 기호를 써서 변수가
아니라 option이라고 명시해 줄 수 있다.

:set textwidth=80
:echo &textwidth

boolean 옵션도 마찬가지. 1과 0이 반환되는 것을 볼 수 있다

:set nowrap
:echo &wrap
" display 0

:set wrap
:echo &wrap
" display 1

위에서 변수를 지정하는 let 명령어를 사용해서도 option을 변경할 수 있다.

:let &textwidth = 100
:set textwidth?

이런식으로 문법을 사용할 수 도 있다.

:let &textwidth = &textwidth + 10
:set textwidth?

Local options

local option도 동일하게 사용 가능하다. 두 개의 파일을 열고 각각 다른 local option을 줘 보자.

:let &l:number = 1
:let &l:number = 0

첫 번 쨰 파일은 첫 줄이 1로, 두 번 째 파일은 0으로 시작되는 것을 볼 수 있다.

Registers as Variables

register도 변수로 사용할 수 있다. a register에 변수를 지정하고 사용해 보자.

:let @a = "hello!"

이제 "ap (a register를 붙여넣기) 명령어를 실행시키면 hello!가 붙여넣어 지는 것을 볼 수 있따. 마찬가지로
echo 로 읽을 수도 있음.

:echo @a

unnamed, search register도 동일하게 사용 가능하다.

특정 항목을 복사하거나, 검색한 후에 다음 명령어로 확인해보자.

:echo @"
:echo @/

Exercises

  • Go through your ~/.vimrc file and change some of the set and setlocal commands to their let forms. Remember that boolean options still need to be set to something.
set number
let &number = 1
  • Try setting a boolean option like wrap to something other than zero or one. What happens when you set it to a different number? What happens if you set it to a string?
let &number = 3
" 0이 아닌 숫자면 true로, string이면 E521: Number required: &number = 'test' 에러가 반환된다.
  • Go back through your ~/.vimrc file and undo the changes. You should never use let if set will suffice -- it's harder to read.

  • Read :help registers and look over the list of registers you can read and write.

    • 0 - 9

    • a - z, A - Z

    • ": unnamed register

    • -: small delete register

    • #: Alternate buffer register

    • =: expression register

    • /: Last search register

    • The selection and drop registers "*, "+ and "~

    • The black hole register "_

    • Three read-only registers ":, "., "%