一個極簡主義的 Vim 插件管理器。
下載plug.vim並將其放在“autoload”目錄中。
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
(或 Neovim 的~/.config/nvim/init.vim
)
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 中,您可以將設定寫入名為init.lua
Lua 腳本檔案中。以下程式碼是與上面的 Vim 腳本範例等效的 Lua 腳本。
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 | 按需載入:指令或 -mappings |
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 格式建構repo 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 函數,您可以傳遞 lambda 表達式,如下所示:
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-version 強制它無條件運行: PlugInstall!
和PlugUpdate!
。
提示
當您內聯編寫do
選項時,請確保轉義 BAR 和雙引號,因為它們會被錯誤地識別為命令分隔符號或尾隨註解的開頭。
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 次才能達到收支平衡。您應該問自己這是否是您的時間投資。
確保您透過使用--startuptime
縮短 Vim 的啟動時間來解決正確的問題。
vim --startuptime /tmp/log
按需加載只能作為最後的手段。它基本上是一種 hacky 解決方法,並不總是保證有效。
提示
您可以將空列表傳遞給on
或for
選項以停用插件的載入。您可以使用plug#load(NAMES...)
函數手動載入插件。
請參閱 https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually
麻省理工學院