tools/vim

Learn Vimscript The Hard Way - 47. Even More Advanced Syntax Highlighting

seul chan 2020. 4. 27. 00:47

Even More Advanced Syntax Highlighting

syntax highlighting의 마지막 중요한 파트를 다룬 후 다른 것으로 넘어갈 것이다. 더 많은 것을 배우고 싶다면 :help syntax를 참고하고 다른 사람들이 어떻게 syntax file을 만들었는지 참고하라

Highlighting Strings

Potion은 다른 많은 프로그래밍 언어들처럼 "Hello, world!"와 같은 string literal을 지원한다. 우리는 이들을 하이라이팅 해우저야 한다. 이를 위해 syntax regino 명령어를 사용할 것이다.

syntax region potionString start=/\v"/ skip=/\v\\./ end=/\v"/
highlight link potionString String

factorial.pn을 다시 열면 string이 하이라이트 된 것을 확인할 수 있다.

첫 줄은 "region"을 사용하여 syntax group을 만들었다. Region은 start 패턴과 end 패턴을 가지고 해당 syntax를 정의한다. 위 케이스에서 Potion string은 첫 번 째 따옴표에서 시작하여 다음 따옴표에서 끝난다.

syntax region의 "skip" 인자는 string escape ("She said: \"Vimscript is tricky, but useful\"!"와 같은)를 처리할 수 있게 해준다.

skip 인자를 사용하지 않으면 위 구문은 제대로 하이라이팅 되지 않을 것이다.

직접 위 텍스트를 .pn 파일에 추가해보면 하이라이팅 되는 것을 확인할 수 있다.

간략히 말해서 skip 인자는 vim에게 "해당 region에 매칭이 시작되면 skip에 해당되는 모든 것들은 region에 포함되더라도 모두 스킵한다"라고 말해주는 역할을 한다.

이것에 대해서 얼마간 더 생각해보자. 만약 "foo \\" bar"와 같은 경우라면 어떻게 될까? 그렇게 되는 것이 올바른 방식일까? 항상 정확한 방식이 존재하기는 할까? 책을 덮고 이것에 대해 몇 분간 더 생각해보자!

Exercises

  • Add syntax highlighting for single quoted strings.

아래 줄만 추가해주면 된다.

syntax region potionString start=/\v'/ skip=/\v\\./ end=/\v'/
  • Read :help syn-region.

  • Reading that should take longer than reading this chapter. Pour yourself a drink, you've earned it!