Un gestionnaire de plugins Vim minimaliste.
Téléchargez plug.vim et placez-le dans le répertoire "autoload".
curl -fLo ~ /.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Vous pouvez automatiser le processus en plaçant la commande dans votre fichier de configuration Vim comme suggéré ici.
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
Ajoutez une section vim-plug à votre ~/.vimrc
(ou ~/.config/nvim/init.vim
pour Neovim)
call plug#begin()
Plug
call plug#end()
Par exemple,
call plug#begin ()
" List your plugins here
Plug ' tpope/vim-sensible '
call plug#end ()
Rechargez le fichier ou redémarrez Vim, vous pourrez alors,
:PlugInstall
pour installer les plugins:PlugUpdate
pour installer ou mettre à jour les plugins:PlugDiff
pour revoir les modifications depuis la dernière mise à jour:PlugClean
pour supprimer les plugins qui ne sont plus dans la liste Note
C'est essentiellement tout ce que vous devez savoir pour commencer. Le reste du document est destiné aux utilisateurs avancés qui souhaitent en savoir plus sur les fonctionnalités et options.
Conseil
plug#end()
exécute automatiquement filetype plugin indent on
et syntax enable
. Nous pensons qu'il s'agit d'une bonne valeur par défaut pour la plupart des utilisateurs, mais si vous ne souhaitez pas ce comportement, vous pouvez rétablir les paramètres après l'appel.
call plug#end ()
filetype indent off " Disable file-type-specific indentation
syntax off " Disable syntax highlighting
Les exemples suivants démontrent les fonctionnalités supplémentaires de 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
Dans Neovim, vous pouvez écrire votre configuration dans un fichier script Lua nommé init.lua
. Le code suivant est le script Lua équivalent à l'exemple de script Vim ci-dessus.
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 ' )
Commande | Description |
---|---|
PlugInstall [name ...] [#threads] | Installer des plugins |
PlugUpdate [name ...] [#threads] | Installer ou mettre à jour des plugins |
PlugClean[!] | Supprimez les plugins non répertoriés (la version bang sera nettoyée sans invite) |
PlugUpgrade | Mettre à niveau vim-plug lui-même |
PlugStatus | Vérifier l'état des plugins |
PlugDiff | Examiner les modifications de la mise à jour précédente et les modifications en attente |
PlugSnapshot[!] [output path] | Générer un script pour restaurer l'instantané actuel des plugins |
Plug
Option | Description |
---|---|
branch / tag / commit | Branche/tag/commit du référentiel à utiliser |
rtp | Sous-répertoire contenant le plugin Vim |
dir | Répertoire personnalisé pour le plugin |
as | Utiliser un nom différent pour le plugin |
do | Hook post-mise à jour (string ou funcref) |
on | Chargement à la demande : commandes ou mappages
|
for | Chargement à la demande : types de fichiers |
frozen | Ne pas supprimer et ne pas mettre à jour sauf indication contraire explicite |
Drapeau | Défaut | Description |
---|---|---|
g:plug_threads | 16 | Nombre de threads par défaut à utiliser |
g:plug_timeout | 60 | Limite de temps de chaque tâche en secondes ( Ruby & Python ) |
g:plug_retries | 2 | Nombre de tentatives en cas d'expiration du délai ( Ruby & Python ) |
g:plug_shallow | 1 | Utiliser un clone peu profond |
g:plug_window | -tabnew | Commande pour ouvrir la fenêtre du plug |
g:plug_pwindow | vertical rightbelow new | Commande pour ouvrir la fenêtre d'aperçu dans PlugDiff |
g:plug_url_format | https://git::@github.com/%s.git | Format printf pour créer l'URL du dépôt (s'applique uniquement aux commandes Plug suivantes) |
D
- PlugDiff
S
- PlugStatus
R
- Réessayer les tâches de mise à jour ou d'installation ayant échouéU
- Mettre à jour les plugins dans la plage sélectionnéeq
- Abandonner les tâches en cours ou fermer la fenêtre:PlugStatus
L
- Charger le plugin:PlugDiff
X
- Annuler la mise à jour Certains plugins nécessitent des étapes supplémentaires après l'installation ou la mise à jour. Dans ce cas, utilisez l'option do
pour décrire la tâche à effectuer.
Plug ' Shougo/vimproc.vim ' , { ' do ' : ' make ' }
Plug ' ycm-core/YouCompleteMe ' , { ' do ' : ' ./install.py ' }
Si la valeur commence par :
, elle sera reconnue comme une commande Vim.
Plug ' fatih/vim-go ' , { ' do ' : ' :GoInstallBinaries ' }
Pour appeler une fonction Vim, vous pouvez passer une expression lambda comme ceci :
Plug ' junegunn/fzf ' , { ' do ' : { - > fzf#install () } }
Si vous avez besoin de plus de contrôle, vous pouvez transmettre une référence à une fonction Vim qui prend un argument de dictionnaire.
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 ' ) }
Un hook post-mise à jour est exécuté dans le répertoire du plugin et ne s'exécute que lorsque le référentiel a changé, mais vous pouvez le forcer à s'exécuter sans condition avec les versions bang des commandes : PlugInstall!
et PlugUpdate!
.
Conseil
Assurez-vous d'échapper aux BARS et aux guillemets lorsque vous écrivez l'option do
en ligne, car ils sont reconnus par erreur comme séparateur de commande ou comme début du commentaire final.
Plug ' junegunn/fzf ' , { ' do ' : ' yes | ./install ' }
Mais vous pouvez éviter l'échappement si vous extrayez la spécification en ligne à l'aide d'une variable (ou de n'importe quelle expression de script Vim) comme suit :
let g: fzf_install = ' yes | ./install '
Plug ' junegunn/fzf ' , { ' do ' : g: fzf_install }
PlugInstall!
et PlugUpdate!
Le programme d'installation suit les étapes suivantes lors de l'installation/mise à jour d'un plugin :
git clone
ou git fetch
depuis son originegit merge
la branche distante Les commandes avec le !
suffixe garantit que toutes les étapes sont exécutées sans condition.
" 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! '
Note
Vous n’en avez probablement pas besoin.
Un plugin Vim correctement implémenté devrait déjà se charger paresseusement sans aucune aide d'un gestionnaire de plugin ( :help autoload
). Il existe donc peu de cas où ces options ont réellement du sens. Rendre le chargement d'un plugin plus rapide relève de la responsabilité du développeur du plugin, et non de l'utilisateur. Si vous trouvez un plugin qui prend trop de temps à charger, envisagez d'ouvrir un ticket sur le suivi des problèmes du plugin.
Laissez-moi vous donner une perspective. Le temps nécessaire pour charger un plugin est généralement inférieur à 2 ou 3 ms sur les ordinateurs modernes. Ainsi, à moins d’utiliser un très grand nombre de plugins, il est peu probable que vous économisiez plus de 50 ms. Si vous avez passé une heure à configurer soigneusement les options permettant de réduire les 50 ms, vous devrez démarrer Vim 72 000 fois juste pour atteindre le seuil de rentabilité. Vous devriez vous demander si c'est un bon investissement de votre temps.
Assurez-vous que vous résolvez le bon problème en décomposant le temps de démarrage de Vim à l'aide de --startuptime
.
vim --startuptime /tmp/log
Le chargement à la demande ne doit être utilisé qu’en dernier recours. Il s’agit essentiellement d’une solution de contournement compliquée dont le fonctionnement n’est pas toujours garanti.
Conseil
Vous pouvez passer une liste vide à on
ou for
pour désactiver le chargement du plugin. Vous pouvez charger manuellement le plugin en utilisant la fonction plug#load(NAMES...)
.
Voir https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually
MIT