Ein minimalistischer Vim-Plugin-Manager.
Laden Sie plug.vim herunter und legen Sie es im Verzeichnis „autoload“ ab.
curl -fLo ~ /.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Sie können den Vorgang automatisieren, indem Sie den Befehl wie hier vorgeschlagen in Ihre Vim-Konfigurationsdatei einfügen.
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
Fügen Sie einen vim-plug-Abschnitt zu Ihrem ~/.vimrc
(oder ~/.config/nvim/init.vim
für Neovim) hinzu.
call plug#begin()
Plug
-Befehlen aufcall plug#end()
Zum Beispiel,
call plug#begin ()
" List your plugins here
Plug ' tpope/vim-sensible '
call plug#end ()
Laden Sie die Datei neu oder starten Sie Vim neu, dann können Sie,
:PlugInstall
um die Plugins zu installieren:PlugUpdate
, um die Plugins zu installieren oder zu aktualisieren:PlugDiff
um die Änderungen seit dem letzten Update zu überprüfen:PlugClean
um Plugins zu entfernen, die nicht mehr in der Liste sind Notiz
Das ist im Grunde alles, was Sie wissen müssen, um loszulegen. Der Rest des Dokuments richtet sich an fortgeschrittene Benutzer, die mehr über die Funktionen und Optionen erfahren möchten.
Tipp
plug#end()
führt automatisch filetype plugin indent on
und syntax enable
aus. Wir glauben, dass dies für die meisten Benutzer eine gute Standardeinstellung ist. Wenn Sie dieses Verhalten jedoch nicht wünschen, können Sie die Einstellungen nach dem Anruf zurücksetzen.
call plug#end ()
filetype indent off " Disable file-type-specific indentation
syntax off " Disable syntax highlighting
Die folgenden Beispiele veranschaulichen die zusätzlichen Funktionen von 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
In Neovim können Sie Ihre Konfiguration in eine Lua-Skriptdatei namens init.lua
schreiben. Der folgende Code ist das Lua-Skript, das dem Vim-Skriptbeispiel oben entspricht.
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 ' )
Befehl | Beschreibung |
---|---|
PlugInstall [name ...] [#threads] | Plugins installieren |
PlugUpdate [name ...] [#threads] | Plugins installieren oder aktualisieren |
PlugClean[!] | Entfernen Sie nicht gelistete Plugins (die Bang-Version wird ohne Aufforderung bereinigt) |
PlugUpgrade | Aktualisieren Sie vim-plug selbst |
PlugStatus | Überprüfen Sie den Status der Plugins |
PlugDiff | Untersuchen Sie die Änderungen gegenüber dem vorherigen Update und die ausstehenden Änderungen |
PlugSnapshot[!] [output path] | Generieren Sie ein Skript zum Wiederherstellen des aktuellen Snapshots der Plugins |
Plug
Option | Beschreibung |
---|---|
branch / tag / commit | Zweig/Tag/Commit des zu verwendenden Repositorys |
rtp | Unterverzeichnis, das das Vim-Plugin enthält |
dir | Benutzerdefiniertes Verzeichnis für das Plugin |
as | Verwenden Sie einen anderen Namen für das Plugin |
do | Post-Update-Hook (String oder Funcref) |
on | Laden bei Bedarf: Befehle oder -Zuordnungen |
for | Laden bei Bedarf: Dateitypen |
frozen | Nicht entfernen und nicht aktualisieren, es sei denn, dies wird ausdrücklich angegeben |
Flagge | Standard | Beschreibung |
---|---|---|
g:plug_threads | 16 | Standardanzahl der zu verwendenden Threads |
g:plug_timeout | 60 | Zeitlimit jeder Aufgabe in Sekunden ( Ruby & Python ) |
g:plug_retries | 2 | Anzahl der Wiederholungsversuche im Falle einer Zeitüberschreitung ( Ruby & Python ) |
g:plug_shallow | 1 | Verwenden Sie einen flachen Klon |
g:plug_window | -tabnew | Befehl zum Öffnen des Plug-Fensters |
g:plug_pwindow | vertical rightbelow new | Befehl zum Öffnen des Vorschaufensters in PlugDiff |
g:plug_url_format | https://git::@github.com/%s.git | printf Format zum Erstellen der Repo-URL (Gilt nur für die nachfolgenden Plug -Befehle) |
D
- PlugDiff
S
– PlugStatus
R
– Wiederholen Sie fehlgeschlagene Aktualisierungs- oder InstallationsaufgabenU
– Plugins im ausgewählten Bereich aktualisierenq
– Brechen Sie die laufenden Aufgaben ab oder schließen Sie das Fenster:PlugStatus
L
– Plugin laden:PlugDiff
X
– Setzen Sie das Update zurück Es gibt einige Plugins, die nach der Installation oder Aktualisierung zusätzliche Schritte erfordern. Verwenden Sie in diesem Fall die Option do
, um die auszuführende Aufgabe zu beschreiben.
Plug ' Shougo/vimproc.vim ' , { ' do ' : ' make ' }
Plug ' ycm-core/YouCompleteMe ' , { ' do ' : ' ./install.py ' }
Wenn der Wert mit :
beginnt, wird er als Vim-Befehl erkannt.
Plug ' fatih/vim-go ' , { ' do ' : ' :GoInstallBinaries ' }
Um eine Vim-Funktion aufzurufen, können Sie einen Lambda-Ausdruck wie folgt übergeben:
Plug ' junegunn/fzf ' , { ' do ' : { - > fzf#install () } }
Wenn Sie mehr Kontrolle benötigen, können Sie einen Verweis auf eine Vim-Funktion übergeben, die ein Wörterbuchargument akzeptiert.
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 ' ) }
Ein Post-Update-Hook wird im Verzeichnis des Plugins ausgeführt und nur ausgeführt, wenn sich das Repository geändert hat. Sie können die bedingungslose Ausführung jedoch mit den Bang-Versionen der Befehle erzwingen: PlugInstall!
und PlugUpdate!
.
Tipp
Achten Sie beim Inline-Schreiben der do
Option darauf, BARs und doppelte Anführungszeichen zu maskieren, da diese fälschlicherweise als Befehlstrennzeichen oder als Beginn des nachgestellten Kommentars erkannt werden.
Plug ' junegunn/fzf ' , { ' do ' : ' yes | ./install ' }
Sie können das Escapen jedoch vermeiden, wenn Sie die Inline-Spezifikation mithilfe einer Variablen (oder eines beliebigen Vim-Skriptausdrucks) wie folgt extrahieren:
let g: fzf_install = ' yes | ./install '
Plug ' junegunn/fzf ' , { ' do ' : g: fzf_install }
PlugInstall!
und PlugUpdate!
Das Installationsprogramm führt bei der Installation/Aktualisierung eines Plugins die folgenden Schritte aus:
git clone
oder git fetch
von seinem Ursprunggit merge
remote branch Die Befehle mit dem !
Suffix stellen sicher, dass alle Schritte bedingungslos ausgeführt werden.
" 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! '
Notiz
Das ist wahrscheinlich nicht nötig.
Ein ordnungsgemäß implementiertes Vim-Plugin sollte ohne die Hilfe eines Plugin-Managers bereits langsam geladen werden ( :help autoload
). Daher gibt es nur wenige Fälle, in denen diese Optionen tatsächlich sinnvoll sind. Es liegt in der Verantwortung des Plugin-Entwicklers, ein Plugin schneller zu laden, nicht des Benutzers. Wenn Sie feststellen, dass das Laden eines Plugins zu lange dauert, sollten Sie erwägen, ein Problem im Issue-Tracker des Plugins zu eröffnen.
Lassen Sie mich Ihnen eine Perspektive geben. Die Zeit, die zum Laden eines Plugins benötigt wird, beträgt auf modernen Computern normalerweise weniger als 2 oder 3 ms. Wenn Sie also nicht sehr viele Plugins verwenden, ist es unwahrscheinlich, dass Sie mehr als 50 ms einsparen. Wenn Sie eine Stunde damit verbracht haben, die Optionen sorgfältig einzurichten, um 50 ms einzusparen, müssen Sie Vim 72.000 Mal starten, um die Gewinnschwelle zu erreichen. Sie sollten sich fragen, ob das eine gute Investition Ihrer Zeit ist.
Stellen Sie sicher, dass Sie das richtige Problem angehen, indem Sie die Startzeit von Vim mithilfe von --startuptime
herunterbrechen.
vim --startuptime /tmp/log
Das Laden auf Abruf sollte nur als letztes Mittel eingesetzt werden. Im Grunde handelt es sich hierbei um eine knifflige Problemumgehung, deren Funktionsfähigkeit nicht immer gewährleistet ist.
Tipp
Sie können eine leere Liste an on
oder for
übergeben, um das Laden des Plugins zu deaktivieren. Sie können das Plugin manuell mit der Funktion plug#load(NAMES...)
laden.
Siehe https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually
MIT