Um gerenciador de plugins Vim minimalista.
Baixe plug.vim e coloque-o no diretório "autoload".
curl -fLo ~ /.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Você pode automatizar o processo colocando o comando em seu arquivo de configuração do Vim conforme sugerido aqui.
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
Adicione uma seção vim-plug ao seu ~/.vimrc
(ou ~/.config/nvim/init.vim
para Neovim)
call plug#begin()
Plug
call plug#end()
Por exemplo,
call plug#begin ()
" List your plugins here
Plug ' tpope/vim-sensible '
call plug#end ()
Recarregue o arquivo ou reinicie o Vim, então você pode,
:PlugInstall
para instalar os plug-ins:PlugUpdate
para instalar ou atualizar os plugins:PlugDiff
para revisar as alterações da última atualização:PlugClean
para remover plugins que não estão mais na lista Observação
Isso é basicamente tudo que você precisa saber para começar. O restante do documento é para usuários avançados que desejam saber mais sobre os recursos e opções.
Dica
plug#end()
executa automaticamente filetype plugin indent on
e syntax enable
. Acreditamos que este seja um bom padrão para a maioria dos usuários, mas se você não quiser esse comportamento, poderá reverter as configurações após a chamada.
call plug#end ()
filetype indent off " Disable file-type-specific indentation
syntax off " Disable syntax highlighting
Os exemplos a seguir demonstram os recursos adicionais do 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
No Neovim, você pode escrever sua configuração em um arquivo de script Lua chamado init.lua
. O código a seguir é o script Lua equivalente ao exemplo de script Vim acima.
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 ' )
Comando | Descrição |
---|---|
PlugInstall [name ...] [#threads] | Instalar plug-ins |
PlugUpdate [name ...] [#threads] | Instalar ou atualizar plug-ins |
PlugClean[!] | Remova plug-ins não listados (a versão bang será limpa sem aviso prévio) |
PlugUpgrade | Atualize o próprio vim-plug |
PlugStatus | Verifique o status dos plug-ins |
PlugDiff | Examine as alterações da atualização anterior e as alterações pendentes |
PlugSnapshot[!] [output path] | Gere script para restaurar o instantâneo atual dos plugins |
Plug
Opção | Descrição |
---|---|
branch / tag / commit | Branch/tag/commit do repositório a ser usado |
rtp | Subdiretório que contém o plugin Vim |
dir | Diretório personalizado para o plugin |
as | Use um nome diferente para o plugin |
do | Gancho pós-atualização (string ou funcref) |
on | Carregamento sob demanda: comandos ou mapeamentos
|
for | Carregamento sob demanda: tipos de arquivo |
frozen | Não remova e não atualize, a menos que seja explicitamente especificado |
Bandeira | Padrão | Descrição |
---|---|---|
g:plug_threads | 16 | Número padrão de threads a serem usados |
g:plug_timeout | 60 | Limite de tempo de cada tarefa em segundos ( Ruby e Python ) |
g:plug_retries | 2 | Número de novas tentativas em caso de tempo limite ( Ruby e Python ) |
g:plug_shallow | 1 | Use clone superficial |
g:plug_window | -tabnew | Comando para abrir a janela do plug |
g:plug_pwindow | vertical rightbelow new | Comando para abrir janela de visualização no PlugDiff |
g:plug_url_format | https://git::@github.com/%s.git | formato printf para construir o URL do repositório (aplica-se apenas aos comandos Plug subsequentes) |
D
- PlugDiff
S
- PlugStatus
R
- Tentar novamente tarefas de atualização ou instalação com falhaU
- Atualizar plug-ins no intervalo selecionadoq
- Abortar as tarefas em execução ou fechar a janela:PlugStatus
L
- Carregar plugin:PlugDiff
X
- Reverter a atualização Existem alguns plug-ins que requerem etapas extras após a instalação ou atualização. Nesse caso, use a opção do
para descrever a tarefa a ser executada.
Plug ' Shougo/vimproc.vim ' , { ' do ' : ' make ' }
Plug ' ycm-core/YouCompleteMe ' , { ' do ' : ' ./install.py ' }
Se o valor começar com :
, será reconhecido como um comando do Vim.
Plug ' fatih/vim-go ' , { ' do ' : ' :GoInstallBinaries ' }
Para chamar uma função do Vim, você pode passar uma expressão lambda assim:
Plug ' junegunn/fzf ' , { ' do ' : { - > fzf#install () } }
Se precisar de mais controle, você pode passar uma referência para uma função do Vim que recebe um argumento de dicionário.
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 ' ) }
Um gancho pós-atualização é executado dentro do diretório do plugin e só é executado quando o repositório for alterado, mas você pode forçá-lo a ser executado incondicionalmente com as versões bang dos comandos: PlugInstall!
e PlugUpdate!
.
Dica
Certifique-se de escapar de BARs e aspas duplas ao escrever a opção do
in-line, pois elas são erroneamente reconhecidas como separador de comando ou o início do comentário final.
Plug ' junegunn/fzf ' , { ' do ' : ' yes | ./install ' }
Mas você pode evitar o escape se extrair a especificação embutida usando uma variável (ou qualquer expressão de script Vim) como segue:
let g: fzf_install = ' yes | ./install '
Plug ' junegunn/fzf ' , { ' do ' : g: fzf_install }
PlugInstall!
e PlugUpdate!
O instalador executa as seguintes etapas ao instalar/atualizar um plugin:
git clone
ou git fetch
desde sua origemgit merge
remote branch Os comandos com o !
sufixo garante que todas as etapas sejam executadas incondicionalmente.
" 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! '
Observação
Você provavelmente não precisa.
Um plugin Vim implementado corretamente já deve carregar lentamente, sem qualquer ajuda de um gerenciador de plugins ( :help autoload
). Portanto, há poucos casos em que essas opções realmente fazem muito sentido. Fazer com que um plugin carregue mais rápido é responsabilidade do desenvolvedor do plugin, não do usuário. Se você encontrar um plug-in que demora muito para carregar, considere abrir um problema no rastreador de problemas do plug-in.
Deixe-me dar uma perspectiva. O tempo que leva para carregar um plugin é geralmente inferior a 2 ou 3 ms em computadores modernos. Portanto, a menos que você use um grande número de plug-ins, é improvável que você economize mais de 50 ms. Se você passou uma hora configurando cuidadosamente as opções para reduzir 50 ms, você terá que iniciar o Vim 72.000 vezes apenas para empatar. Você deve se perguntar se isso é um bom investimento do seu tempo.
Certifique-se de estar resolvendo o problema certo, detalhando o tempo de inicialização do Vim usando --startuptime
.
vim --startuptime /tmp/log
O carregamento sob demanda só deve ser usado como último recurso. É basicamente uma solução alternativa hacky e nem sempre é garantido que funcione.
Dica
Você pode passar uma lista vazia para on
ou for
a opção de desabilitar o carregamento do plugin. Você pode carregar manualmente o plugin usando a função plug#load(NAMES...)
.
Consulte https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually
MIT