미니멀리스트 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
~/.vimrc
(또는 Neovim의 경우 ~/.config/nvim/init.vim
)에 vim-plug 섹션을 추가합니다.
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[!] | 목록에 없는 플러그인 제거(뱅 버전은 프롬프트 없이 정리됩니다) |
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 | repo URL을 빌드하기 위한 printf 형식(후속 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 함수를 호출하려면 다음과 같이 람다 식을 전달하면 됩니다.
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!
명령의 bang-version을 사용하여 무조건 강제로 실행되도록 할 수 있습니다. 그리고 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~3ms 미만입니다. 따라서 매우 많은 수의 플러그인을 사용하지 않는 한 50ms 이상을 절약할 수 없습니다. 50ms를 줄이는 옵션을 신중하게 설정하는 데 한 시간을 보냈다면 손익분기점을 맞추기 위해 Vim을 72,000번 시작해야 합니다. 그것이 시간을 투자하는 것이 좋은 것인지 스스로에게 물어봐야 합니다.
--startuptime
사용하여 Vim의 시작 시간을 분석하여 올바른 문제를 해결하고 있는지 확인하세요.
vim --startuptime /tmp/log
주문형 로딩은 최후의 수단으로만 사용해야 합니다. 기본적으로 해킹된 해결 방법이며 항상 작동이 보장되는 것은 아닙니다.
팁
플러그인 로딩을 비활성화하려면 on
또는 for
옵션에 빈 목록을 전달할 수 있습니다. plug#load(NAMES...)
함수를 사용하여 플러그인을 수동으로 로드할 수 있습니다.
https://github.com/junegunn/vim-plug/wiki/tips#loading-plugins-manually를 참조하세요.
MIT