tools/vim

Learning Vimscript The Hard Way - 50. Section Movement Theory

seul chan 2020. 5. 4. 20:15

Section Movement Theory

만약 당신이 vim의 section movement ([[, ]], [], ][)를 써 보지 않았다면, 지금 :help section을 읽는 시간을 가져보아라.

아직 헷갈려도 괜찮다. 나(저자)도 처음 읽었을 때 그랬었다. 우리는 코드를 작성하면서 이 movement들이 어떻게 동작하는지 살펴보고 다음 장엣허 이를 지원하는 potion 플러그인을 작성할 것이다.

Nroff Files

4가지의 "section movement" 명령어는 파일의 "sections"간에 이동하는 것을 의미하고 만들어졌다.

이 모든 코멘드들은 기본적으로 nroff 파일에서 사용되도록 디자인되어졌다. Nroff는 LaTeXMarkdown같은 언어이다. (UNIX man page에서 사용되는 포멧이다.)

Nroff 파일은 "section headings"을 정의하기 위해 정해진 매크로 셋을 사용한다. 여기 awk 맨 페이지 예시가 있다.

.SH NAME                                                     ***
awk \- pattern-directed scanning and processing language
.SH SYNOPSIS                                                 ***
.B awk
[
.BI \-F
.I fs
]
[
.BI \-v
.I var=value
]
[
.I 'prog'
|
.BI \-f
.I progfile
]
[
.I file ...
]
.SH DESCRIPTION                                              ***
.I Awk
scans each input
.I file
for lines that match ...

.SH로 시작하는 줄은 section headings이다. 해당하는 줄에 ***를 표시해두었다. 4개의 section movement 명령어를 쓰면 이 section heading 줄들간에 커서가 이동되는 것을 볼 수 있다.

vim은 당신이 nroff 파일을 작성하지 않고 있음에도 .과 다른 nroff heading macro (SH 등)로 시작하는 모든 줄을 section header로 간주한다.

section 세팅을 변경함으로써 이 매크로를 바꿀 수 있지만, vim은 여전히 해당 줄 앞에 마침표(.)가 필요하기 때문에 매크로를 변경하여도 potion 파일에서 유연하게 사용할 수 없다.

Braces

section movement 명령어는 한 가지를 더 확인한다: 중괄호({, }) 캐릭터가 줄의 처음에 오는 것이다.

[[]]는 열린 중괄호 ({)를 확인하고, []][는 닫힌 중괄호 ({)를 찾는다.

이 추가적인 방식은 C언어와 같은 언어에서 섹션별 이동을 쉽게 해준다.

다음 내용을 새로운 버퍼에 붙여넣어보자.

Test           A B

Test

.SH Hello      A B

Test

{              A
Test
}                B

Test

.H World       A B

Test
Test           A B

:set filetype=basic으로 파일타입을 BASIC으로 변경한 후 section movement commands를 연습해보자.

[[, ]] 명령어는 A라고 표시된 줄을, [], ][ 명령어는 B라고 표시된 줄을 이동할 것이다.

이는 vim이 어떤 언어의 파일을 다루던간에 (BASIC 파일타입이라도) 항상 두 가지 원칙을 따른다는 것을 확인할 수 있다.

Exercises

  • Read :help section again, now that you know the story of section movement.

  • Read :help sections just for the fun of it.