tools/vim

learn vimscript the hard way - 17장. status line

seul chan 2020. 3. 18. 08:52

Status Lines

vim에서는 각 window 아래에 있는 status line의 텍스트를 customize 할 수 있다. 보통 vim을 주 에디터로 사용한다면 vim-airline 등 플러그인을 사용중이라 이미 화려한(?) status line을 가지고 있을 것이다.

해당 챕터를 따라하기 위해서는 default vim으로 해 보거나 다른 vim config file (~/essential.vim)를 만들어서 해당 설정 파일로 vim을 구동시키는게 좋다.

# 설정 없이 vim open
vim -u NONE

# 원하는 설정을 essential.vim에 넣어준다. number, relativenumber 등...
vim ~/essential.vim
vim -u ~/essential.vim

이제 statusline을 설정해 보자

다음은 file path를 statusline에 보여주는 명령어이다.

:set statusline=%f

혹시 statusline 이 보이지 않는다면 :set laststatus=2를 입력해주자.

이제 FileType을 표시해보자. FileType은 %y로 표시 가능하다.

:set statusline=%f\ -\ FileType:\ %y

그러면 다음과 같이 FileType이 표시된다.

img

백슬래쉬는 space를 escape 해주기 위해서 사용되었다.

statusline은 다음과 같이 +=로 추가 가능하다.

:set statusline=%f         " Path to the file
:set statusline+=\ -\      " Separator (백슬래쉬 뒤에 space가 한 번 씩 총 두 번 들어간다)
:set statusline+=FileType: " Label
:set statusline+=%y        " Filetype of the file

다음은 statusline에 현재줄/전체줄 을 표시해준다. 한번 따라해보자

:set statusline=%l    " Current line
:set statusline+=/    " Separator
:set statusline+=%L   " Total lines

Width and padding

다음 명령어를 실행해보자

:set statusline=[%4l]

아까와는 다르게 현재 줄이 4칸을 차지하고 있다.

:set statusline=Current:\ %4l\ Total:\ %4L

그러면 요런 모습의 status line이 생긴다

Current:   12 Total:  223

space 대신 0을 패딩으로 넣어줄 수도 있다.

:set statusline=%04l

그럼 다음과 같은 모습이 된다. (별로 쓸 일은 없을듯하지만..)

0091

Splitting

vim-aireline 등을 보면 status line 오른편도 사용되는 것을 볼 수 있다. 이를 가능하게 해 주는 명령어는 %=이다.

:set statusline=%f         " Path to the file
:set statusline+=%=        " Switch to the right side
:set statusline+=%l        " Current line
:set statusline+=/         " Separator
:set statusline+=%L        " Total lines

위 명령어를 실행시켜 보면 왼편에는 파일 이름이, 오른편에는 현재 줄 수가 표시된다.

Exercises

  • Skim the list of available codes in :help statusline. Don't worry if you don't understand some of them just yet.

  • Add some lines to your ~/.vimrc file to build yourself a custom status line. Be sure to use the += form of set to split the definition across multiple lines, and add a comment on each line to document what each piece does.

  • Try using autocommands and setlocal to define different status lines for different filetypes. Make sure to wrap the autocommands in groups to prevent duplication (as always).