{"id":13596238,"url":"https://github.com/MarcWeber/vim-addon-manager","last_synced_at":"2025-04-09T16:31:51.889Z","repository":{"id":44584749,"uuid":"449810","full_name":"MarcWeber/vim-addon-manager","owner":"MarcWeber","description":"manage and install vim plugins (including their dependencies) in a sane way. If you have any trouble contact me. Usually I reply within 24 hours","archived":false,"fork":false,"pushed_at":"2024-08-29T08:14:02.000Z","size":1367,"stargazers_count":662,"open_issues_count":32,"forks_count":59,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-04-06T03:04:24.337Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarcWeber.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2009-12-27T02:35:13.000Z","updated_at":"2024-12-19T10:28:23.000Z","dependencies_parsed_at":"2022-07-17T14:30:29.976Z","dependency_job_id":"f6ca961d-48d6-4c82-9291-9781012df99e","html_url":"https://github.com/MarcWeber/vim-addon-manager","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcWeber%2Fvim-addon-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcWeber%2Fvim-addon-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcWeber%2Fvim-addon-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcWeber%2Fvim-addon-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarcWeber","download_url":"https://codeload.github.com/MarcWeber/vim-addon-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248067805,"owners_count":21042359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T16:02:13.027Z","updated_at":"2025-04-09T16:31:51.867Z","avatar_url":"https://github.com/MarcWeber.png","language":"Vim Script","funding_links":[],"categories":["Vim script","Ferramentas","Plugin Management","Vim Script"],"sub_categories":[],"readme":"# VAM — maximizing overall Vim experience\n“VAM” is short name for vim-addon-manager.\nYou declare a set of plugins. VAM will fetch \u0026 activate them at startup or\nruntime depending on your needs. Activating means handling runtimepath and\nmaking sure all .vim file get sourced. The FEATURES to learn more.\n\n![VAM](http://vam.mawercer.de/screenshot.png)\n\nThis screenshot shows:\n- The log buffer\n- The plugin name completion\n- That vim-pi knows about plugins which are neither known by vim-scripts.org\n  nor by vim.sf.net (marked by NA)\n\n## If you believe in VAM's collaborative properties\nthen you may also want to have a look at [vim-git-wiki](http://vim-wiki.mawercer.de).\n\n## SUPPORT / HELP\nVAM is well supported by at least 2 maintainers. Try github tickets or Vim irc\nchannel on freenode.\n\n## NEOVIM SUPPORT\nVAMActivate after startup does load plugin/\\*\\*/\\*.lua files.\nlazy.nvim plugin manager might be worth looking at, too\n\n## PLUGIN_NAME - What is a plugin ?\nA plugin is set of files having Vim's rtp directory layout (plugin/, ftplugin/, ...).\nIt is identified by name which will be looked up by vim-pi or a url such as\ngit:url, github:user/repo, ...\n\nPlugin names can be found by using \u003cc-x\u003e\u003cc-p\u003e completion in .vim files.\nVAMActivate \u0026 VAMPluginInfo commands also offer name completion by \u003ctab\u003e or \u003cc-d\u003e.\n\nIn most cases you activate plugins by using its name. Wrapping the name\nin a dictionary {'name': 'name'} allows attaching additional information\nwhich could be used by checkout functions ...\n\n## MINIMAL setup (3 lines)\n\n```vim\nset nocompatible | filetype indent plugin on | syn on\nset runtimepath+=/path/to/vam\ncall vam#ActivateAddons([PLUGIN_NAME])\n```\n\n## Recommended setup\nThis setup will checkout VAM and all plugins on its own unless they exist:\n\n```vim\n\" put this line first in ~/.vimrc\nset nocompatible | filetype indent plugin on | syn on\n\nfun! SetupVAM()\n  let c = get(g:, 'vim_addon_manager', {})\n  let g:vim_addon_manager = c\n  let c.plugin_root_dir = expand('$HOME', 1) . '/.vim/vim-addons'\n\n  \" Force your ~/.vim/after directory to be last in \u0026rtp always:\n  \" let g:vim_addon_manager.rtp_list_hook = 'vam#ForceUsersAfterDirectoriesToBeLast'\n\n  \" most used options you may want to use:\n  \" let c.log_to_buf = 1\n  \" let c.auto_install = 0\n  let \u0026rtp.=(empty(\u0026rtp)?'':',').c.plugin_root_dir.'/vim-addon-manager'\n  if !isdirectory(c.plugin_root_dir.'/vim-addon-manager/autoload')\n    execute '!git clone --depth=1'\n        \\       'https://github.com/MarcWeber/vim-addon-manager'\n        \\       shellescape(c.plugin_root_dir.'/vim-addon-manager', 1)\n  endif\n\n  \" This provides the VAMActivate command, you could be passing plugin names, too\n  call vam#ActivateAddons([], {})\nendfun\ncall SetupVAM()\n\n\" ACTIVATING PLUGINS\n\n\" OPTION 1, use VAMActivate\nVAMActivate PLUGIN_NAME PLUGIN_NAME ..\n\n\" OPTION 2: use call vam#ActivateAddons\ncall vam#ActivateAddons([PLUGIN_NAME], {})\n\" use \u003cc-x\u003e\u003cc-p\u003e to complete plugin names\n\n\" OPTION 3: Create a file ~/.vim-scripts putting a PLUGIN_NAME into each line (# for comments)\n\" See lazy loading plugins section in README.md for details\ncall vam#Scripts('~/.vim-scripts', {'tag_regex': '.*'})\n\n```\n\n## easy setup windows users:\nGive the [downloader](http://vam.mawercer.de/) a try if you're too lazy to install supporting tools. In\nthe doc/ directory you'll find additional information. https (self signed certificate) can be used, too.\n\n## all commands\n\n```vim\n\" Note: All commands support completion (\u003cc-d\u003e or \u003ctab\u003e)\n\n\" install [UE] without activating for reviewing\nVAMInstall PLUGIN_NAME PLUGIN_NAME\n\n\" install [UE], then activate\nVAMActivate P1 P2 ...\nVAMActivateInstalled (same, but completion is limited to installed plugins)\n\n\" find plugins by name github url or script id and display all information\nVAMPluginInfo script_id or characters to match any description against\n\n\" update plugins (by name or all you're using right now) - you should restart Vim afterwards:\nVAMUpdate vim-pi P1 P2\nVAMUpdateActivated\n\nVAMListActivated\nVAMUninstallNotLoadedPlugins P1 P2\n\n\" [UE]: unless the directory exists\n\" P1 P2 represents arbitrary plugin names, use \u003cc-x\u003e\u003cc-p\u003e to complete in .vim files\n\n\" If you need a plugin to be activated immediately. Example: You require a command in your .vimrc:\ncall vam#ActivateAddons(['P1', P2'], {'force_loading_plugins_now': 1})\n\" (should we create a special command for this?)\n```\nAlso: Of course VAM allows using subdirectories of repositories as runtimepath.\nEg See vim-pi-patching.\n\n## lazily loading plugins / tag plugins by topic / pass dictionaries for adding arbitrary options\nYou can tag plugins and load them lazily. If a plugin provides a 'au\nBufRead,BufNewFile set ft..' like code fource buftype by adding a key such as\n{'exec':'set ft=tss'} for instance\n\n```vim\nlet scripts = []\ncall add(scripts, {'names': ['plugin_for_c_1', 'plugin_for_c_2'], 'tag': 'c-dev'})\ncall add(scripts, {'name': 'plugin_ruby', 'tag': 'ruby-dev'})\n\" must activate by filename because .pov filetype is known after the script\n\" script-povray got activated\ncall add(scripts, {'name': 'script-povray', 'filename_regex':'\\.pov$'})\n\" for others ft_regex can be used:\ncall add(scripts, {'name': 'script-php', 'ft_regex':'^\\.php$'})\n\n\" always activate this color scheme, and set runtimepath\ncall add(scripts, {'name': 'github:daylerees/colour-schemes', 'addon-info': {'runtimepath': 'vim'} })\n\n\" just activate a rtp (also works at runtime with all hooks such as sourcing ftdetect/*.vim files)\ncall add(scripts, {'activate_this_rtp': 'absolute-rtp-path'})\n\n\n\" tell VAM about all scripts, and immediately activate plugins having the c-dev tag:\ncall vam#Scripts(scripts, {'tag_regex': 'c-dev'})\n\n\" activate all tagged scripts immediately\ncall vam#Scripts([], {'tag_regex': '.*'})\n```\nInstead of adding dictionaries to a local list you can make VAM read them from a file\nas show at [vim-wiki's plugin management article](http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html)\n\nHaving a declarative list of plugins you might be using allows\n  * implementing a garbage collector\n  * implementing third party update/checkout scripts which run checkout in parallel\n  * reusing such interface by other plugin managers\n\n## How does VAM know about dependencies?\nPlugins ship with addon-info.json files listing the dependencies as names\n(eventually with source location). Those who don't get patched by vim-pi.\n\nOnly mandatory dependencies should be forced this way. Optional dependencies\nshould still be installed/activated by you.\n\n\n## emulating vundle\nNOTE: VAM is declarative. Thus Bundle behavel like VAMActivate:\n1) checkout plugin unless directory exists\n2) activate it\nThus there is no reason to run BundleInstall or such (what for anyway?)\n\n```vim\nset rtp+=~/.vim/bundle/vim-addon-manager/\ncall vundle#rc()\nBundle fugitive\nVAMActivate by-name-and-pull-depenedencies\n```\n\nEmulation is not complete yet. If you want us to complete it (eg implement the\nsecond {rtp: ..} create a github issue. Its obsolete, because vim-pi is very\nlikely to know about it if you install by name.\n\n## learn more\n- by skimming this README.md file\n- by looking at headlines at [doc/\\*getting-started.txt](https://raw.github.com/MarcWeber/vim-addon-manager/master/doc/vim-addon-manager-getting-started.txt).\n  (Note: this is best read in Vim with :set ft=help)\n\n## FEATURES\n- Declarative: The behaviour of Vim is determined by your .vimrc only. [1]\n- Automatic runtimepath handling: install/ update/ use manually installed addons \n  on startup or load them lazily as needed when you feel that way. [3]\n- Builtin dependency management. [2]\n- Based on a [pool](http://vam.mawercer.de) of addons which is \n  maintained by the community. This allows warning you if you’re going to \n  install outdated packages. Of course you can opt-out and use your own pool \n  easily.\n- Sources from www.vim.org, git, mercurial, subversion, bazaar, darcs, [...]\n- Addon name completion in .vim files and :(Update|Activate)Addons commands.\n- Short syntax for github repos: `github:name/repo`.\n- Optionally writes update logs.\n- Cares about [windows users](http://mawercer.de/~marc/vam/index.php).\n- Addon info by name or script id (:AddonInfo).\n- Tries to preserve user modifications by using diff/patch tools on unix like\n  environments (for non-version-controlled sources).\n- 100 % VimL (is this really that good?..)\n- The VimL code which gets started each time is contained in one file: vam.vim\n  (700 loc). Everything else has carefully been put into additional supporting\n  files.\n\n[1]: assuming you always use latest versions\n\n[2]: this serves the community by making it easy to reuse other’s code. \n     Implemented by a addon-info.json file and patchinfo database for addons \n     without VAM support.\n\n[3]: Yes — there are some special cases where it does not work correctly because \n     some autocommands don’t get triggered\n\n[4]: Plugin authors should use addon-info file instead. patchinfo.vim is for \n     addons not supporting VAM.\n\n## Let me see all docs!\nHere you go:\n\n- [GETTING STARTED](https://raw.github.com/MarcWeber/vim-addon-manager/master/doc/vim-addon-manager-getting-started.txt)\n- [additional docs](https://raw.github.com/MarcWeber/vim-addon-manager/master/doc/vim-addon-manager-additional-documentation.txt)\n\n## BUGS\nIt’ll never have nice install progress bars — because the “progress” is not very \nwell known because addons can be installed at any time — and additional \ndependencies may be encountered.\n\nIf you want to be able to rollback you have to use git submodules yourself or \nfind a different solution — because VAM also supports other VCS and installing \nfrom archives. We have implemented experiemntal setup, but because VAM may add\nadditional files such as addon-info.json in some cases repositories look dirty\nusually.\n\nVAM does not support parallel installation yet (Like NeoBundle) - we think\ndependencies are more important. If you feel strongly about this create a issue.\nThis would require rewriting quite a lot of code.\n\nEach call of VAMActivate takes about 1ms - if that's too much pass many plugin\nnames at once.\n\n## FUTURE\nVAM suffers from installing one plugin after the other which is slowing down.\nIt should install in parallel/in the background.\nSome plugins like YouCompleteMe might even depend on the Python interpreter to\nbe used (conda env)\n\nNot all people use VAM.\nVAMActivate can be used on demand.\nSo how should this all move into the future?\nusing neovim's async/await? or sync'd install\nallowing users to 'plug' or whatever install a plugin?\n\ninstall_activate_plugin_wait('github:foo/bar')\ninstall_activate_plugin('github:foo/bar', clb)\nuser could choose whether he wants to be asked before getting new code and\nactivate it - there could be security issues.\n\nThen people could use the plugin manager they want and locations they want\nand they could rewrtite foo/bar by baz/bar if there is need ?\n\n[... TODO ... ]\n\nA totally different approach would be a cross language/cross platform package\nmanager with a declarative dependency file {\"requires\": [...]} like.\nThen an external tool could be taking care of.\nThen updating all would be like conda ..\n\nThis would also allow linux systems to package everything automatically.\nSo I somewhat like this idea\n\n## Related work\n\n[vim-wiki's list of alternatives](http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html)\n\n[debian’s vim plugin manager](http://packages.debian.org/sid/vim-addon-manager)\nThe author (Jamessan) is fine with this project sharing the same name.\n\n[vundle](http://github.com/gmarik/Vundle.vim) Referencing it here because\ngmarik taught us how important it is to have both: A simple nice user interface\nand a short descriptive, complete README.md - Other managers see link above.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMarcWeber%2Fvim-addon-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMarcWeber%2Fvim-addon-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMarcWeber%2Fvim-addon-manager/lists"}