Learn Vimscript The Hard Way - 43. Plugin Layout With Pathogen
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|