Learning Vimscript The Hard Way - 50. Section Movement Theory
Section Movement Theory
만약 당신이 vim의 section movement ([[
, ]]
, []
, ][
)를 써 보지 않았다면, 지금 :help section
을 읽는 시간을 가져보아라.
아직 헷갈려도 괜찮다. 나(저자)도 처음 읽었을 때 그랬었다. 우리는 코드를 작성하면서 이 movement들이 어떻게 동작하는지 살펴보고 다음 장엣허 이를 지원하는 potion 플러그인을 작성할 것이다.
Nroff Files
4가지의 "section movement" 명령어는 파일의 "sections"간에 이동하는 것을 의미하고 만들어졌다.
이 모든 코멘드들은 기본적으로 nroff 파일에서 사용되도록 디자인되어졌다. Nroff는 LaTeX
나 Markdown
같은 언어이다. (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.