Минималистичный менеджер плагинов Vim.
Загрузите plug.vim и поместите его в каталог «автозагрузки».
curl -fLo ~ /.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Вы можете автоматизировать этот процесс, поместив команду в файл конфигурации Vim, как предложено здесь.
iwr - useb https: // raw.githubusercontent.com / junegunn / vim - plug / master / plug.vim |`
ni $HOME / vimfiles / autoload / plug.vim - Force
sh -c ' curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim '
curl -fLo ~ /.var/app/io.neovim.nvim/data/nvim/site/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
iwr - useb https: // raw.githubusercontent.com / junegunn / vim - plug / master / plug.vim |`
ni " $ ( @ ( $ env: XDG_DATA_HOME , $ env: LOCALAPPDATA )[ $null -eq $ env: XDG_DATA_HOME ] ) /nvim-data/site/autoload/plug.vim " - Force
Добавьте раздел vim-plug в ваш ~/.vimrc
(или ~/.config/nvim/init.vim
для Neovim)
call plug#begin()
Plug
call plug#end()
Например,
call plug#begin ()
" List your plugins here
Plug ' tpope/vim-sensible '
call plug#end ()
Перезагрузите файл или перезапустите Vim, тогда вы сможете:
:PlugInstall
для установки плагинов:PlugUpdate
для установки или обновления плагинов.:PlugDiff
для просмотра изменений последнего обновления.:PlugClean
для удаления плагинов, которых больше нет в списке. Примечание
Это, в принципе, все, что вам нужно знать, чтобы начать. Остальная часть документа предназначена для опытных пользователей, которые хотят узнать больше о функциях и опциях.
Кончик
plug#end()
автоматически выполняет filetype plugin indent on
и syntax enable
. Мы считаем, что это хороший вариант по умолчанию для большинства пользователей, но если вы не хотите такого поведения, вы можете восстановить настройки после звонка.
call plug#end ()
filetype indent off " Disable file-type-specific indentation
syntax off " Disable syntax highlighting
Следующие примеры демонстрируют дополнительные возможности vim-plug.
call plug#begin ()
" The default plugin directory will be as follows:
" - Vim (Linux/macOS): '~/.vim/plugged'
" - Vim (Windows): '~/vimfiles/plugged'
" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
" You can specify a custom plugin directory by passing it as the argument
" - e.g. `call plug#begin('~/.vim/plugged')`
" - Avoid using standard Vim directory names like 'plugin'
" Make sure you use single quotes
" Shorthand notation for GitHub; translates to https://github.com/junegunn/seoul256.vim.git
Plug ' junegunn/seoul256.vim '
" Any valid git URL is allowed
Plug ' https://github.com/junegunn/vim-easy-align.git '
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug ' fatih/vim-go ' , { ' tag ' : ' * ' }
" Using a non-default branch
Plug ' neoclide/coc.nvim ' , { ' branch ' : ' release ' }
" Use 'dir' option to install plugin in a non-default directory
Plug ' junegunn/fzf ' , { ' dir ' : ' ~/.fzf ' }
" Post-update hook: run a shell command after installing or updating the plugin
Plug ' junegunn/fzf ' , { ' dir ' : ' ~/.fzf ' , ' do ' : ' ./install --all ' }
" Post-update hook can be a lambda expression
Plug ' junegunn/fzf ' , { ' do ' : { - > fzf#install () } }
" If the vim plugin is in a subdirectory, use 'rtp' option to specify its path
Plug ' nsf/gocode ' , { ' rtp ' : ' vim ' }
" On-demand loading: loaded when the specified command is executed
Plug ' preservim/nerdtree ' , { ' on ' : ' NERDTreeToggle ' }
" On-demand loading: loaded when a file with a specific file type is opened
Plug ' tpope/vim-fireplace ' , { ' for ' : ' clojure ' }
" Unmanaged plugin (manually installed and updated)
Plug ' ~/my-prototype-plugin '
" Call plug#end to update &runtimepath and initialize the plugin system.
" - It automatically executes `filetype plugin indent on` and `syntax enable`
call plug#end ()
" You can revert the settings after the call like so:
" filetype indent off " Disable file-type-specific indentation
" syntax off " Disable syntax highlighting
" Color schemes should be loaded after plug#end().
" We prepend it with 'silent!' to ignore errors when it's not yet installed.
silent ! colorscheme seoul256
В Neovim вы можете записать свою конфигурацию в файл сценария Lua с именем init.lua
. Следующий код представляет собой сценарий Lua, эквивалентный приведенному выше примеру сценария Vim.
local vim = vim
local Plug = vim . fn [ ' plug# ' ]
vim . call ( ' plug#begin ' )
-- Shorthand notation for GitHub; translates to https://github.com/junegunn/seoul256.vim.git
Plug ( ' junegunn/seoul256.vim ' )
-- Any valid git URL is allowed
Plug ( ' https://github.com/junegunn/vim-easy-align.git ' )
-- Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug ( ' fatih/vim-go ' , { [ ' tag ' ] = ' * ' })
-- Using a non-default branch
Plug ( ' neoclide/coc.nvim ' , { [ ' branch ' ] = ' release ' })
-- Use 'dir' option to install plugin in a non-default directory
Plug ( ' junegunn/fzf ' , { [ ' dir ' ] = ' ~/.fzf ' })
-- Post-update hook: run a shell command after installing or updating the plugin
Plug ( ' junegunn/fzf ' , { [ ' dir ' ] = ' ~/.fzf ' , [ ' do ' ] = ' ./install --all ' })
-- Post-update hook can be a lambda expression
Plug ( ' junegunn/fzf ' , { [ ' do ' ] = function ()
vim . fn [ ' fzf#install ' ]()
end })
-- If the vim plugin is in a subdirectory, use 'rtp' option to specify its path
Plug ( ' nsf/gocode ' , { [ ' rtp ' ] = ' vim ' })
-- On-demand loading: loaded when the specified command is executed
Plug ( ' preservim/nerdtree ' , { [ ' on ' ] = ' NERDTreeToggle ' })
-- On-demand loading: loaded when a file with a specific file type is opened
Plug ( ' tpope/vim-fireplace ' , { [ ' for ' ] = ' clojure ' })
-- Unmanaged plugin (manually installed and updated)
Plug ( ' ~/my-prototype-plugin ' )
vim . call ( ' plug#end ' )
-- Color schemes should be loaded after plug#end().
-- We prepend it with 'silent!' to ignore errors when it's not yet installed.
vim . cmd ( ' silent! colorscheme seoul256 ' )
Команда | Описание |
---|---|
PlugInstall [name ...] [#threads] | Установить плагины |
PlugUpdate [name ...] [#threads] | Установите или обновите плагины |
PlugClean[!] | Удалить плагины, не входящие в список (версия Bang будет очищена без запроса) |
PlugUpgrade | Обновите сам vim-plug |
PlugStatus | Проверьте статус плагинов |
PlugDiff | Изучите изменения из предыдущего обновления и ожидающие изменения. |
PlugSnapshot[!] [output path] | Сгенерировать скрипт для восстановления текущего снапшота плагинов |
Plug
Вариант | Описание |
---|---|
branch / tag / commit | Ветвь/тег/фиксация используемого репозитория |
rtp | Подкаталог, содержащий плагин Vim |
dir | Пользовательский каталог для плагина |
as | Используйте другое имя для плагина |
do | Хук после обновления (строка или funcref) |
on | Загрузка по требованию: команды или сопоставления
|
for | Загрузка по требованию: типы файлов |
frozen | Не удаляйте и не обновляйте, если это явно не указано. |
Флаг | По умолчанию | Описание |
---|---|---|
g:plug_threads | 16 | Количество потоков по умолчанию для использования |
g:plug_timeout | 60 | Ограничение времени выполнения каждой задачи в секундах ( Ruby и Python ) |
g:plug_retries | 2 | Количество повторов в случае таймаута ( Ruby и Python ) |
g:plug_shallow | 1 | Используйте поверхностный клон |
g:plug_window | -tabnew | Команда открытия окна плагина |
g:plug_pwindow | vertical rightbelow new | Команда открытия окна предварительного просмотра в PlugDiff |
g:plug_url_format | https://git::@github.com/%s.git | printf для создания URL-адреса репозитория (применяется только к последующим командам Plug ) |
D
— PlugDiff
S
— PlugStatus
R
— повторить неудачную попытку обновления или установки.U
— обновить плагины в выбранном диапазоне.q
- Прервать выполнение запущенных задач или закрыть окно:PlugStatus
L
— загрузить плагин:PlugDiff
X
— отменить обновление Некоторые плагины требуют дополнительных действий после установки или обновления. В этом случае используйте опцию do
, чтобы описать задачу, которую необходимо выполнить.
Plug ' Shougo/vimproc.vim ' , { ' do ' : ' make ' }
Plug ' ycm-core/YouCompleteMe ' , { ' do ' : ' ./install.py ' }
Если значение начинается с :
, оно будет распознано как команда Vim.
Plug ' fatih/vim-go ' , { ' do ' : ' :GoInstallBinaries ' }
Чтобы вызвать функцию Vim, вы можете передать лямбда-выражение следующим образом:
Plug ' junegunn/fzf ' , { ' do ' : { - > fzf#install () } }
Если вам нужно больше контроля, вы можете передать ссылку на функцию Vim, которая принимает аргумент словаря.
function ! BuildYCM (info)
" info is a dictionary with 3 fields
" - name: name of the plugin
" - status: 'installed', 'updated', or 'unchanged'
" - force: set on PlugInstall! or PlugUpdate!
if a: info .status == ' installed ' || a: info .force
! ./install. py
endif
endfunction
Plug ' ycm-core/YouCompleteMe ' , { ' do ' : function ( ' BuildYCM ' ) }
Перехватчик после обновления выполняется внутри каталога плагина и запускается только при изменении репозитория, но вы можете заставить его запускаться безоговорочно с помощью bang-версий команд: PlugInstall!
и PlugUpdate!
.
Кончик
Обязательно экранируйте BAR и двойные кавычки при написании встроенного параметра do
, поскольку они ошибочно распознаются как разделитель команд или начало завершающего комментария.
Plug ' junegunn/fzf ' , { ' do ' : ' yes | ./install ' }
Но вы можете избежать экранирования, если извлечете встроенную спецификацию с помощью переменной (или любого выражения сценария Vim) следующим образом:
let g: fzf_install = ' yes | ./install '
Plug ' junegunn/fzf ' , { ' do ' : g: fzf_install }
PlugInstall!
и PlugUpdate!
Установщик выполняет следующие шаги при установке/обновлении плагина:
git clone
или git fetch
из источникаgit merge
удаленную ветку. Команды с !
суффикс гарантирует, что все шаги выполняются безоговорочно.
" NERD tree will be loaded on the first invocation of NERDTreeToggle command
Plug ' preservim/nerdtree ' , { ' on ' : ' NERDTreeToggle ' }
" Multiple commands
Plug ' junegunn/vim-github-dashboard ' , { ' on ' : [ ' GHDashboard ' , ' GHActivity ' ] }
" Loaded when clojure file is opened
Plug ' tpope/vim-fireplace ' , { ' for ' : ' clojure ' }
" Multiple file types
Plug ' kovisoft/paredit ' , { ' for ' : [ ' clojure ' , ' scheme ' ] }
" On-demand loading on both conditions
Plug ' junegunn/vader.vim ' , { ' on ' : ' Vader ' , ' for ' : ' vader ' }
" Code to execute when the plugin is lazily loaded on demand
Plug ' junegunn/goyo.vim ' , { ' for ' : ' markdown ' }
autocmd ! User goyo. vim echom ' Goyo is now loaded! '
Примечание
Вам, вероятно, это не нужно.
Правильно реализованный плагин Vim уже должен загружаться лениво без помощи менеджера плагинов ( :help autoload
). Таким образом, есть несколько случаев, когда эти варианты действительно имеют большой смысл. За ускорение загрузки плагина отвечает разработчик плагина, а не пользователь. Если вы обнаружите плагин, загрузка которого занимает слишком много времени, рассмотрите возможность создания проблемы в системе отслеживания проблем плагина.
Позвольте мне дать вам точку зрения. Время, необходимое для загрузки плагина на современных компьютерах, обычно составляет менее 2–3 мс. Поэтому, если вы не используете очень большое количество плагинов, вы вряд ли сэкономите более 50 мс. Если вы потратили час на тщательную настройку параметров сокращения времени на 50 мс, вам придется запустить Vim 72 000 раз, чтобы выйти на уровень безубыточности. Вы должны спросить себя, является ли это хорошей инвестицией вашего времени.
Убедитесь, что вы решаете правильную проблему, определив время запуска Vim с помощью --startuptime
.
vim --startuptime /tmp/log
Загрузку по требованию следует использовать только в крайнем случае. По сути, это хакерский обходной путь, и его работа не всегда гарантирована.
Кончик
Вы можете on
пустой список или for
загрузку плагина. Вы можете загрузить плагин вручную, используя функцию plug#load(NAMES...)
.
См. https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually.
Массачусетский технологический институт