Viml projects
This article describes viml project(plugin) file hierarchy. You may also want to see viml plugins.
Tutorials
steve losh plugin tutorial https://learnvimscriptthehardway.stevelosh.com/chapters/41.html
Basics
viml does not have the concept of packages (like java, python, ...) but instead has plugins.
Plugin shares the same directory structure as your
~/.vim
directory, are added to the vim runtime path, and loaded with vim. See/usr/share/vim/vim81
for an example.example:
~/.vim/bundles/yourplugin/ autoload/ # source called colors/ # colorschemes doc/ # vim help files ftplugin/ # sourced (into buffer) if filetype matches filename plugin/ # sourced on vim-startup syntax/ # syntax files tools/ # standalone cli tools (like bin/) after/{syntax,colors,autoload,...} # load after vim
autoload (packages)
Autoload solves the same problem as packages/imports in java/python. These source files are not read until one of their commands is invoked. No sourcing required.
" ~/.vim/bundles/yourplugin/autoload/filesystem/unix.vim " {filesystem}#{unix} <-- see function! filesystem#unix#normalize_path(filepath) let normalized_filepath = substitute(a:filepath, '\\', '/', 'g') return normalized_filepath endfunc
calling autoload functions simply refers to the file on the path.call filesystem#unix#normalize_path('\\a\\b\\c')
ftplugin
ftplugin files are sourced (locally to buffer) if
- their filename matches current buffer's filetype (ex: 'python.vim' is read when reading a '.py' file)
- they are in a directory whose name matches current buffer's filetype (ex: 'python/pymode.vim' is read when reading a '.py' file)
plugin
This directory is loaded during vim startup.
You should skip reloading these files if they have already been loaded
otherwise some plugin managers may trip over them.if exists('XXXXX_plugin_loaded') || &cp finish endif let XXXXX_plugin_loaded=1