半瓶水折騰Vim記(Portable gVim安裝插件管理vim-plug)


對於Vim,我就是半瓶水,或者連半瓶水也算不上,只能算是見過瓶子而已。然后沒有把基礎打牢固就想取巧東拼西湊的實現功能。

以下是在gVim Portable上面安裝插件管理vim-plug,然后安裝插件vim-easy-align的過程。

在vim-plug官方頁面上並沒有介紹如何在portable版本的Vim上安裝,然后在Google上搜索這個問題的解決方法,結果只有很少幾個結果(比如 https://github.com/junegunn/vim-plug/issues/438),而且感覺並沒有把問題的原理講清楚。這種找不到答案的情況一般有兩種可能性,第一種可能是因為問題確實很小眾,沒人注意到也沒人研究;第二種就是問題太簡單,本就不應該成為一個問題。我初次嘗試沒有結果之后,隔了一個周末的思考,想着這個插件管理在實現上無非就是根據名稱或網站查找,然后下載插件文件,再寫入到配置文件里面。這有什么復雜的呢?於是,又結合其他搜索到的主題帖子繼續研究。

Installation

Download plug.vim and put it in the "autoload" directory (in normal version, default path is ~/vimfiles/autoload) //對於Portable的GVim,autoload的位置: \util_gVimPortable\App\vim\vim80\autoload\plug.vim,那就簡單的把從鏈接下載好的plug.vim文件放進這個目錄中。

Vim

Unix
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

You can automate the process by putting the command in your Vim configuration file as suggested here.

Windows (PowerShell)
md ~\vimfiles\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
  $uri,
  $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
    "~\vimfiles\autoload\plug.vim"
  )
)


Usage

Add a vim-plug section to your ~/.vimrc (or stdpath('config') . '/init.vim' for Neovim) //vimrc的位置:\util_gVimPortable\Data\settings\_vimrc

  1. Begin the section with call plug#begin()
  2. List the plugins with Plug commands
  3. call plug#end() to update &runtimepath and initialize plugin system
    • Automatically executes filetype plugin indent on and syntax enable. You can revert the settings after the call. e.g. filetype indent off, syntax off, etc.

Example

" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')

" Make sure you use single quotes

" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'

" Any valid git URL is allowed
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Using a non-master branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'

" Initialize plugin system
call plug#end()


另外,結合了知乎上搜索到的中文指引,教給了我另一個思路,

如果希望安裝新插件,首先找到其在github.com的網址,然后將其追加至vimrc配置文件中的call plug#begin()call plug#end()之間,最后執行以下命令安裝所有引用的插件:

:PlugInstall

你也可以使用以下命令,指定安裝特定的插件:

:PlugInstall gist-vim 

卸載插件

如果希望卸載插件,請先在vimrc配置文件中注釋或者刪除對應插件的配置信息,然后再執行以下命令:

:PlugClean
更新插件

使用以下命令,可以更新vim-plug插件自身:

:PlugUpgrade

使用以下命令,可以批量更新所有已安裝的插件:

:PlugUpdate
插件狀態

使用以下命令,可以查看當前已安裝插件的狀態信息:

:PlugStatus

有兩點需要注意的是:
  • Git需要安裝,確保在CMD里面輸入git然后回車可以正常才能讓vim-plug通過git下載更新插件。
  • vim下輸入命令 (PlugInstall) 是區分大小寫的,如果輸入pluginstall是不可以的。

  • //vimrc的位置:\util_gVimPortable\Data\settings\_vimrc

    修改后的_vimrc:
    call plug#begin('~/vimfiles/plugged') 這條指令中括號里的路徑就是指定插件下載的目標路徑。是根據_vimrc文件的路徑的相對路徑來確定的,'~/vimfiles/plugged'就是指_vimrc文件當前路徑下有一個叫vimfiles的文件夾,再深入一層plugged文件夾,所有的插件就下載到這里。

    安裝成功的效果:


    附:
    vim-plug
    相關的命令用法

    Commands

    Command Description
    PlugInstall [name ...] [#threads] Install plugins
    PlugUpdate [name ...] [#threads] Install or update plugins
    PlugClean[!] Remove unlisted plugins (bang version will clean without prompt)
    PlugUpgrade Upgrade vim-plug itself
    PlugStatus Check the status of plugins
    PlugDiff Examine changes from the previous update and the pending changes
    PlugSnapshot[!] [output path] Generate script for restoring the current snapshot of the plugins

    Plug options

    Option Description
    branch/tag/commit Branch/tag/commit of the repository to use
    rtp Subdirectory that contains Vim plugin
    dir Custom directory for the plugin
    as Use different name for the plugin
    do Post-update hook (string or funcref)
    on On-demand loading: Commands or <Plug>-mappings
    for On-demand loading: File types
    frozen Do not update unless explicitly specified

    Global options

    Flag Default Description
    g:plug_threads 16 Default number of threads to use
    g:plug_timeout 60 Time limit of each task in seconds (Ruby & Python)
    g:plug_retries 2 Number of retries in case of timeout (Ruby & Python)
    g:plug_shallow 1 Use shallow clone
    g:plug_window vertical topleft new Command to open plug window
    g:plug_pwindow above 12new Command to open preview window in PlugDiff
    g:plug_url_format https://git::@github.com/%s.git printf format to build repo URL (Only applies to the subsequent Plug commands)

    Keybindings

    • D - PlugDiff
    • S - PlugStatus
    • R - Retry failed update or installation tasks
    • U - Update plugins in the selected range
    • q - Close the window
    • :PlugStatus
      • L - Load plugin
    • :PlugDiff
      • X - Revert the update

    Example: A small sensible Vim configuration

    call plug#begin()
    Plug 'tpope/vim-sensible'
    call plug#end()

    On-demand loading of plugins

    " NERD tree will be loaded on the first invocation of NERDTreeToggle command
    Plug 'scrooloose/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!'

    The for option is generally not needed as most plugins for specific file types usually don't have too much code in the plugin directory. You might want to examine the output of vim --startuptime before applying the option.

    Post-update hooks

    There are some plugins that require extra steps after installation or update. In that case, use the do option to describe the task to be performed.

    Plug 'Shougo/vimproc.vim', { 'do': 'make' }
    Plug 'ycm-core/YouCompleteMe', { 'do': './install.py' }

    If the value starts with :, it will be recognized as a Vim command.

    Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }

    If you need more control, you can pass a reference to a Vim function that takes a single argument.

    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') }

    Both forms of post-update hook are executed inside the directory of the plugin and only run when the repository has changed, but you can force it to run unconditionally with the bang-versions of the commands: PlugInstall! and PlugUpdate!.

    Make sure to escape BARs and double-quotes when you write the do option inline as they are mistakenly recognized as command separator or the start of the trailing comment.

    Plug 'junegunn/fzf', { 'do': 'yes \| ./install' }

    But you can avoid the escaping if you extract the inline specification using a variable (or any Vimscript expression) as follows:

    let g:fzf_install = 'yes | ./install'
    Plug 'junegunn/fzf', { 'do': g:fzf_install }

    PlugInstall! and PlugUpdate!

    The installer takes the following steps when installing/updating a plugin:

    1. git clone or git fetch from its origin
    2. Check out branch, tag, or commit and optionally git merge remote branch
    3. If the plugin was updated (or installed for the first time)
      1. Update submodules
      2. Execute post-update hooks

    The commands with the ! suffix ensure that all steps are run unconditionally.


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM