tools/vim

Learn Vimscript The Hard Way - 43. Plugin Layout With Pathogen

seul chan 2020. 4. 23. 01:03

A New Hope: Plugin Layout with Pathogen

vim 플러그인의 바닐라 레이아웃은 새로운 파일을 추가하여 사용하는 데에는 문제가 없지만, 다른 사람이 쓴 플러그인을 사용할 떄에는 문제가 된다.

과거에는, 다른 사람이 작성한 플러그인을 사용하기 위해서는 이를 다운로드 받아 하나씩 맞는 디렉토리에 넣어주어야 했다.

이 접근법은 몇 가지 문제점을 갖는다.

  • 플러그인을 업데이트 하고 싶은 경우: 오래된 파일을 업데이트하면 되지만 만약에 저자가 파일을 삭제할 경우에는?
  • 두 플러그인이 같은 이름의 파일을 가지고 있는다면? (utils.vim같이 자주 쓰이는 이름) 이를 다시 이름붙이면 되기는 하지만 autoload/나 다른 디렉토리 등 이름이 영향을 미치는 경우에는?

이를 쉽게 만들기 위해서 Vimball같이 여러가지 방법들을 사용하였었는데, 다행이 이제는 더이상 고통받지 않아도 된다. Tim Pope 플러그인을 관리할 수 있는 Pathogen 플러그인을 만들었다.

pathogen이 어떻게 동작하는지 간단하게 살펴보자.

Runtimepath

vim이 syntax/와 같은 서브디렉토리의 파일을 볼 때에는 하나의 위치만 확인하지 않는다. Linux/Unix/BSD 시스템의 PATH같이 vim은 파일을 찾아서 로드하라고 지정할 수 있는 runtimepath 세팅을 가지고 있다.

데스크탑에 colors 티렉토리를 만들고 mycolor.vim 파일을 만들어보자. (비어있어도 상관 없다.) vim을 열고 다음 명령어를 실행하면 에러가 날 것이다.

:color mycolor

이제 다음 명령어를 실행시켜보자.

:set runtimepath=/Users/<username>/Desktop

대신에 본인의 사용자명을 넣어준다. 만약에 다른 디렉토리에 colors를 만들었다면 해당 디렉토리를 적어주자.

이제 다시 위 명령어를 실행시켜보자.

:color mycolor

이번에는 mycolor.vim 파일을 찾을 수 있기 때문에 에러를 발생시키지 않는다.

Pathogen

Pathogen 플러그인은 vim을 로드할 때 path들을 자동으로 runtimepath에 추가해준다. ~/.vim/bundle/에 있는 디렉토리도 runtimepath에 추가된다.

이는 bundle/ 하위의 디렉토리들은 colors/syntax/ 처름 일반적인 vim 플러그인 디렉토리들과 동일한 디렉토리를 가지고 있어야 한다는 말이다.

이는 플러그인 업데이트를 아주 쉽게 만들어준다. 기존의 plugin 디렉토리를 모두 제거하고 새로운 버전으로 대체하면 된다.

Being Pathogen-Compatible

우리의 Potion 플러그인을 작성할 때 우리는 Pathgen을 이용할 것이다. 다음과 같은 구조로 맞춰주기만 하면 된다!

potion/
    README
    LICENSE
    doc/
        potion.txt
    ftdetect/
        potion.vim
    ftplugin/
        potion.vim
    syntax/
        potion.vim
    ... etc ...

Exercises

  • Install Pathogen if you haven't already done so.

  • Create a Mercurial or Git repository for your plugin, called potion. You can put it anywhere you like and symlink it into ~/.vim/bundle/potion/ or just put it directly in ~/.vim/bundle/potion/.

  • Create README and LICENSE files in the repository and commit them.

  • Push the repository up to Bitbucket or GitHub.

  • Read :help runtimepath.

Default runtimepath per OS

Unix: "$HOME/.vim,
    $VIM/vimfiles,
    $VIMRUNTIME,
    $VIM/vimfiles/after,
    $HOME/.vim/after"
Amiga: "home:vimfiles,
    $VIM/vimfiles,
    $VIMRUNTIME,
    $VIM/vimfiles/after,
    home:vimfiles/after"
PC:    "$HOME/vimfiles,
    $VIM/vimfiles,
    $VIMRUNTIME,
    $VIM/vimfiles/after,
    $HOME/vimfiles/after"
Macintosh: "$VIM:vimfiles,
    $VIMRUNTIME,
    $VIM:vimfiles:after"
VMS: "sys$login:vimfiles,
    $VIM/vimfiles,
    $VIMRUNTIME,
    $VIM/vimfiles/after,
    sys$login:vimfiles/after")
Directories which will be searched for runtime files

filetype.vim    filetypes by file name |new-filetype|
scripts.vim    filetypes by file contents |new-filetype-scripts|
autoload/    automatically loaded scripts |autoload-functions|
colors/    color scheme files |:colorscheme|
compiler/    compiler files |:compiler|
doc/        documentation |write-local-help|
ftplugin/    filetype plugins |write-filetype-plugin|
indent/    indent scripts |indent-expression|
keymap/    key mapping files |mbyte-keymap|
lang/        menu translations |:menutrans|
menu.vim    GUI menus |menu.vim|
pack/        packages |:packadd|
plugin/    plugin scripts |write-plugin|
print/    files for printing |postscript-print-encoding|
spell/    spell checking files |spell|
syntax/    syntax files |mysyntaxfile|
tutor/    files for vimtutor |tutor|