├── autoload ├── vim_plugmanager.vim └── vim_plugmanager │ └── PlugList.vim ├── doc └── vim_plugmanager.rux └── plugin └── vim_plugmanager.vim /autoload/vim_plugmanager.vim: -------------------------------------------------------------------------------- 1 | " Date Create: 2015-03-05 11:26:34 2 | " Last Change: 2015-06-07 20:28:46 3 | " Author: Artur Sh. Mamedbekov (Artur-Mamedbekov@yandex.ru) 4 | " License: GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html) 5 | 6 | let s:File = vim_lib#base#File# 7 | let s:System = vim_lib#sys#System#.new() 8 | 9 | let g:vim_plugmanager#._installedPlugins = [] 10 | 11 | "" {{{ 12 | " Метод подключает все установленные плагины с помощью команды Plugin в конеце файла plugins.vim 13 | "" }}} 14 | function! vim_plugmanager#_enableInstalledPlugins(level) " {{{ 15 | let s:plugsFile = s:File.absolute(a:level . s:File.slash . 'plugins.vim') 16 | if !s:plugsFile.isFile() 17 | call s:plugsFile.create() 18 | endif 19 | 20 | for l:plug in g:vim_plugmanager#._installedPlugins 21 | call s:plugsFile.write("Plugin '" . l:plug . "'") 22 | endfor 23 | endfunction " }}} 24 | 25 | "" {{{ 26 | " Метод формирует список установленных и подключенных плагинов. 27 | "" }}} 28 | function! vim_plugmanager#plugList() " {{{ 29 | let l:screen = g:vim_plugmanager#PlugList# 30 | if l:screen.getWinNum() != -1 31 | " Закрыть окно, если оно уже открыто. 32 | call l:screen.unload() 33 | else 34 | call l:screen.gactive('t') 35 | endif 36 | endfunction " }}} 37 | 38 | "" {{{ 39 | " Метод пытается установить заданный плагин. 40 | " Плагин не будет установлен, если он уже подключен. 41 | " Важно помнить, что установка плагина с помощью данного метода требует дальнейшего подключения его с помощью команды Plugin. 42 | " @param string level Уровень загрузки, для которого будет устанавливаться плагин. 43 | " @param string name Имя плагина в формате логин/имя для репозитория GitHub. 44 | "" }}} 45 | function! vim_plugmanager#install(level, name) " {{{ 46 | let l:realname = strpart(a:name, stridx(a:name, '/') + 1) 47 | if vim_lib#sys#Autoload#isPlug(l:realname) 48 | return 0 49 | endif 50 | 51 | " Создание каталога для плагина 52 | let l:levels = g:vim_lib#sys#Autoload#levels 53 | let l:plugdir = s:File.absolute(a:level . s:File.slash . l:levels[a:level]['plugdir'] . s:File.slash . l:realname) 54 | if !l:plugdir.isDir() 55 | call l:plugdir.createDir() 56 | endif 57 | 58 | " Копирование плагина 59 | call s:System.exe('git clone --recursive https://github.com/' . a:name . ' ' . l:plugdir.getAddress()) 60 | 61 | " Индексация документации 62 | let l:doc = l:plugdir.getChild('doc') 63 | if l:doc.isDir() 64 | exe 'helptags ' . l:doc.getAddress() 65 | endif 66 | 67 | call add(l:levels[a:level]['plugins'], l:realname) 68 | call insert(g:vim_plugmanager#._installedPlugins, l:plugdir.getName()) 69 | 70 | " Разрешение зависимостей 71 | let l:pluginInfoFile = l:plugdir.getChild('plugman.vim') 72 | if l:pluginInfoFile.isExists() && l:pluginInfoFile.isFile() 73 | exe 'let l:pluginInfo = ' . join(l:pluginInfoFile.read(), '') 74 | if has_key(l:pluginInfo, 'requires') 75 | for [l:usedPlug, l:usedVersion] in items(l:pluginInfo['requires']) 76 | call vim_plugmanager#install(a:level, l:usedPlug) 77 | endfor 78 | endif 79 | endif 80 | endfunction " }}} 81 | 82 | "" {{{ 83 | " Метод пытается удалить заданный плагин. 84 | " @param string level Уровень загрузки, из которого будет удаляться плагин. 85 | " @param string name Имя плагина. 86 | "" }}} 87 | function! vim_plugmanager#delete(level, name) " {{{ 88 | let l:levels = g:vim_lib#sys#Autoload#levels 89 | let l:plugdir = s:File.absolute(a:level . s:File.slash . l:levels[a:level]['plugdir'] . s:File.slash . a:name) 90 | if l:plugdir.isDir() 91 | call l:plugdir.deleteDir() 92 | call remove(l:levels[a:level]['plugins'], index(l:levels[a:level]['plugins'], a:name)) 93 | endif 94 | endfunction " }}} 95 | -------------------------------------------------------------------------------- /autoload/vim_plugmanager/PlugList.vim: -------------------------------------------------------------------------------- 1 | " Date Create: 2015-03-05 11:36:30 2 | " Last Change: 2015-06-07 20:25:51 3 | " Author: Artur Sh. Mamedbekov (Artur-Mamedbekov@yandex.ru) 4 | " License: GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html) 5 | 6 | let s:System = vim_lib#sys#System#.new() 7 | let s:Buffer = vim_lib#sys#Buffer# 8 | let s:Content = vim_lib#sys#Content#.new() 9 | 10 | let s:screen = s:Buffer.new('#Plugins-list#') 11 | call s:screen.temp() 12 | call s:screen.option('filetype', 'plugins-list') 13 | call s:screen.option('syntax', 'vim_lib-tmp') 14 | 15 | function! s:screen.render() " {{{ 16 | let l:levels = vim_lib#sys#Autoload#getLevels() 17 | let l:result = '" Plugins list (Press ? for help) "' . "\n\n" 18 | for l:level in keys(l:levels) 19 | let l:result .= '" ' . l:level . "\n" 20 | let l:result .= join(l:levels[l:level]['plugins'], "\n") 21 | let l:result .= "\n\n" 22 | endfor 23 | return l:result 24 | endfunction " }}} 25 | 26 | call s:screen.map('n', 'a', 'install') 27 | call s:screen.map('n', 'dd', 'delete') 28 | 29 | function! s:screen.install() " {{{ 30 | let l:level = g:vim_lib#sys#Autoload#currentLevel 31 | let l:name = s:System.read('Enter address of the plugin github: ') 32 | if l:name != '' 33 | call vim_plugmanager#install(l:level, l:name) 34 | call vim_plugmanager#_enableInstalledPlugins(l:level) 35 | call self.redraw() 36 | endif 37 | endfunction " }}} 38 | function! s:screen.delete() " {{{ 39 | let l:plug = expand('') 40 | " Определение уровня плагина. {{{ 41 | let l:n = s:Content.pos()['l'] 42 | while l:n 43 | let l:line = s:Content.line(l:n) 44 | if l:line =~ '^"' 45 | let l:level = strpart(l:line, 2) " Удаление коментария из пути уровня. 46 | break 47 | endif 48 | let l:n -= 1 49 | endwhile 50 | " }}} 51 | if s:System.confirm('Realy delete plugin "' . l:level . '::' . l:plug . '"?') 52 | call vim_plugmanager#delete(l:level, l:plug) 53 | call self.redraw() 54 | endif 55 | endfunction " }}} 56 | 57 | call s:screen.map('n', '?', 'showHelp') 58 | " Подсказки. {{{ 59 | let s:screen.help = ['" Manual "', 60 | \ '', 61 | \ '" a - install plugin to the current level', 62 | \ '" dd - delete current plugin', 63 | \ '' 64 | \] 65 | " }}} 66 | function! s:screen.showHelp() " {{{ 67 | if s:Content.line(1) != self.help[0] 68 | let self.pos = s:Content.pos() 69 | call s:Content.add(1, self.help) 70 | else 71 | call self.active() 72 | call s:Content.pos(self.pos) 73 | endif 74 | endfunction " }}} 75 | 76 | let vim_plugmanager#PlugList# = s:screen 77 | -------------------------------------------------------------------------------- /doc/vim_plugmanager.rux: -------------------------------------------------------------------------------- 1 | *vim_plugmanager.txt* Для Vim версии 7.0. *vim_plugmanager* 2 | 3 | РУКОВОДСТВО ПО VIM_PLUGMANAGER 4 | 5 | 1. Описание |vim_plugmanager-description| 6 | 2. Зависимости |vim_plugmanager-requirements| 7 | 3. Установка |vim_plugmanager-install| 8 | 4. Использование |vim_plugmanager-use| 9 | 5. Команды |vim_plugmanager-commands| 10 | 6. Меню |vim_plugmanager-menu| 11 | 12 | ================================================================================ 13 | 1. Описание *vim_plugmanager-description* 14 | 15 | Плагин vim_plugmanager реализует механизмы управления плагинами редактора. Он 16 | позволяет устанавливать, удалять плагины, имеет встроеный механизм разрешения 17 | зависимостей плагинов, а так же позволяет просматривать список доступных на 18 | данный момент плагинов, сгруппированных по уровню загрузки (глобальные, 19 | пользовательские и проектные). 20 | 21 | ================================================================================ 22 | 2. Зависимости *vim_plugmanager-requirements* 23 | 24 | Данный плагин работает с редактором Vim версии 7.0 или старше. 25 | 26 | vim_lib https://github.com/Bashka/vim_lib 27 | Плагин реализован с использованием класса vim_lib#sys#Plugin#, а так 28 | же использует некоторые компоненты этой библиотеки. 29 | 30 | ================================================================================ 31 | 3. Установка *vim_plugmanager-install* 32 | 33 | Плагин устанавливается аналогично другим плагинам редактора Vim. 34 | 35 | ================================================================================ 36 | 4. Использование *vim_plugmanager-use* 37 | 38 | Для управления плагинами используется экран просмотра установленных плагинов. 39 | Открыть его можно с помощью команды 'PlugmanagerList' или пункта меню 40 | 'Plugins' данного плагина. 41 | 42 | Для установки нового плагина используйте клавишу 'a' во время просмотра экрана 43 | установленных плагинов. В качестве репозитория используется GitHub, поэтому 44 | необходимо указать имя устанавливаемого плагина в формате логин/имя. 45 | 46 | Если плагин имеет зависимости, их можно перечислить в файле plugman.vim, 47 | который должен находится в корневом каталоге плагина. Для этого используется 48 | следующий формат записи: 49 | > 50 | { 51 | 'name': 'vim_unittest_phpunit', 52 | 'requires': { 53 | 'Bashka/vim_unittest': '1' 54 | } 55 | } 56 | 57 | Использовать комментарии в этом файле не допускается. 58 | 59 | После установки, плагин будет активирован добавлением команды 'Plugin' в файл 60 | .vim/plugins.vim. Этот файл достаточно подключить в файле .vimrc или _vimrc 61 | для работы со всеми установленными плагинами. 62 | 63 | Важно помнить, что плагин будет установлен в каталог текущего уровня загрузки. 64 | Другими словами, если вы открыли некоторый проект, то плагин будет установлен в 65 | каталог .vim данного проекта и, соответственно, доступен только в нем. 66 | 67 | Для удаления плагина наведите курсор ввода на имя целевого плагина в экране 68 | просмотра установленных плагинов и нажмите комбинацию клавиш 'dd'. После 69 | удаления плагина, его необходимо отключить удалив соответствующую команду 70 | 'Plugin имяПлагина' из файла инициализации (.vim/plugins.vim). 71 | 72 | ================================================================================ 73 | 5. Команды *vim_plugmanager-comm* 74 | 75 | PlugmanagerList *vim_plugmanager-comm-PlugmanagerList* 76 | Команда отображает список установленных плагинов. 77 | 78 | ================================================================================ 79 | 6. Меню *vim_plugmanager-menu* 80 | 81 | Plugins *vim_plugmanager-menu-Plugins* 82 | Пункт меню отображает список установленных плагинов. 83 | 84 | ================================================================================ 85 | vim:tw=78:ts=8:ft=help:norl:colorcolumn=+3: 86 | -------------------------------------------------------------------------------- /plugin/vim_plugmanager.vim: -------------------------------------------------------------------------------- 1 | " Date Create: 2015-03-05 11:26:01 2 | " Last Change: 2015-03-16 18:30:47 3 | " Author: Artur Sh. Mamedbekov (Artur-Mamedbekov@yandex.ru) 4 | " License: GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html) 5 | 6 | let s:Plugin = vim_lib#sys#Plugin# 7 | 8 | let s:p = s:Plugin.new('vim_plugmanager', '1') 9 | 10 | "" {{{ 11 | " Отобразить список установленных и подключенных плагинов. 12 | "" }}} 13 | call s:p.menu('Plugins', 'plugList', '1') 14 | 15 | "" {{{ 16 | " Отобразить список установленных и подключенных плагинов. 17 | "" }}} 18 | call s:p.comm('PlugmanagerList', 'plugList()') 19 | 20 | call s:p.reg() 21 | --------------------------------------------------------------------------------