tools/vim

Learn Vimscript The Hard Way - 44. Detecting Filetypes

seul chan 2020. 4. 24. 00:08

Detecting Filetypes

이제 우리의 플러그인에서 사용할 간단한 Potion 파일을 만들자. factorial.pn 파일을 만들어서 다음 코드를 추가하라

factorial = (n):
    total = 1
    n to 1 (i):
        total *= i.
    total.

10 times (i):
    i string print
    '! is: ' print
    factorial (i) string print
    "\n" print.

이는 간단한 factorial 함수를 보여준다. potion factorial.pn을 실행시키면 다음 결과가 반환된다.

0! is: 0
1! is: 1
2! is: 2
3! is: 6
4! is: 24
5! is: 120
6! is: 720
7! is: 5040
8! is: 40320
9! is: 362880

잠시 시간을 가지고 위 코드가 어떻게 동작하는지 확인해보자. Potion docs를 참고해보자. 이는 vimscript를 이해하는데에는 중요하지 않지만 더 나은 프로그래머가 되게 해 줄 것이다. (저자가 Potion을 참 좋아하나보다)

Detecting Potion Files

vim에서 factorial.pn 파일을 열고 다음 명령어를 실행시켜보자.

:set filetype?
filetype=

.pn 파일이 무엇인지 모르기 때문에 filetype=이라는 결과가 나올 것이다. 이를 고쳐보자.

전 장에서 만든 플러그인 레파지토리 안에 ftdetect/potion.vim을 추가해보자.

au BufNewFile,BufRead *.pn set filetype=potion

이는 간단한 autocommand를 만들어준다: .pn 확장자를 가진 파일에 potion 파일타입을 주는것이다.

평소에 하던 것처럼 autocommand group을 만들지 않은 것에 주목하라. vim은 자동으로 ftdetect/*.vim 파일을 래핑하여 그룹으로 만들어 주기 때문에 걱정할 필요 없다.

factorial.pn을 닫고 다시 열어보자. 이제 filetype 이 potion이 나오는 것을 볼 수 있다.

:set filetype?
filetype=potion

vim이 실행될 때 ~/.vim/bundle/potion/ftdetect/potion.vim를 로드하여 factorial.pn을 열었을 때 자동으로 filetypepotion으로 세팅해 준 것이다.

만약 이렇게 나오지 않으면 pathogen이 제대로 설치되지 않았을 수 있다. 요새는 vundle이나 plug를 쓰기 때문에 pathogen이 없을 수 있으니 설치해주자. 다음 두 줄이면 설치가 가능하다.

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

plug에서 하려면 ~/.vim/plugged/potion/을 추가하고, ~/.vimrc 파일에 Plug '~/.vim/plugged/potion'를 추가해주면 된다. call plug#begin('~/.vim/plugged')call plug#end() 사이에 추가하여야 한다.

Exercices

  • Read :help ft. Don't worry if you don't understand everything there.

  • Read :help setfiletype.

  • Modify the Potion plugin's ftdetect/potion.vim script to use setfiletype instead of set filetype.

au BufNewFile,BufRead *.pn setfiletype potion