مدير البرنامج المساعد 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، يمكنك تمرير تعبير 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 ' ) }
يتم تنفيذ ربط ما بعد التحديث داخل دليل البرنامج الإضافي ويتم تشغيله فقط عند تغيير المستودع، ولكن يمكنك إجباره على التشغيل دون قيد أو شرط باستخدام إصدارات الأوامر: 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 72000 مرة فقط لتحقيق التعادل. يجب أن تسأل نفسك ما إذا كان هذا استثمارًا جيدًا لوقتك.
تأكد من أنك تعالج المشكلة الصحيحة عن طريق تقسيم وقت بدء تشغيل Vim باستخدام --startuptime
.
vim --startuptime /tmp/log
يجب استخدام التحميل عند الطلب فقط كحل أخير. إنه في الأساس حل بديل وليس مضمونًا دائمًا للعمل.
نصيحة
يمكنك تمرير قائمة فارغة إلى for
on
أو تعطيل تحميل المكون الإضافي. يمكنك تحميل البرنامج الإضافي يدويًا باستخدام وظيفة plug#load(NAMES...)
.
راجع https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually
معهد ماساتشوستس للتكنولوجيا